import copy
person=['hehe',['save',1000]]
p1=person[:]
p2=person[:]
p1[0]='aaa'
p2[1][1]=5111
print(p1)
print(p2)
结果是
['aaa', ['save', 5111]]
['hehe', ['save', 5111]]
import copy
person=['hehe',['save',1000]]
p1=person[:]
p2=copy.copy(person)
p1[0]='aaa'
p2[1][1]=5111
print(p1)
print(p2)
结果还是
['aaa', ['save', 5111]]
['hehe', ['save', 5111]]
利用切片操作和工厂方法list方法和copy.copy方法拷贝就叫浅拷贝,只是拷贝了最外围的对象本身,内部的元素都只是拷贝了一个引用而已。
浅拷贝拷贝了引用,p1[0]改变,改变了引用
import copy
person=['hehe',['save',1000]]
p1=person[:]
p2=copy.deepcopy(person)
p1[0]='aaa'
p2[1][1]=5111
print(p1)
print(p2)
结果是
['lx', ['save', 1000]]
['musk', ['save', 5111]]
利用copy中的deepcopy方法进行拷贝就叫做深拷贝,外围和内部元素都进行了拷贝对象本身,而不是引用。
但是对于数字,字符串和其他原子类型对象等,没有被拷贝的说法,即便是用深拷贝,查看id的话也是一样的,如果对其重新赋值,也只是新创建一个对象,替换掉旧的而已。