‘=’ 一般意义的复制
? ? ? ?我们所说的一般意义的“等于号“相当于引用,即原始队列改变,被赋值的队列也会作出相同的改变。直接赋值,传递对象的引用而已,原始列表改变,被赋值的队列也会做相同的改变!
list1 = [1,2,[3,4]]
print(list1)
list2 = list1
print(list2)
list1.append(5)
print(list1,list2)
list1[2].append(3.5)
print(list1,list2)
浅拷贝copy
import copy
list1 = [1,2,[3,4]]
print(list1)
list2 = copy.copy(list1)
print(list2)
# list1.append(5)
# print(list1,list2)
list1[2].append(3.5)
print(list1,list2)
浅拷贝会把原先列表中的元素地址复制到新的列表中
import copy
list1 = [1,2,[3,4]]
list2 = copy.copy(list1)
print(id(list1))
print(id(list2))
print(id(list1[2]))
print(id(list2[2]))
深拷贝 deepcopy
Python中的copy动作,对于一个复杂对象的子对象并不会完全复制,什么是复杂对象的子对象呢?就比如序列里的嵌套序列,字典里的嵌套序列等都是复杂对象的子对象。对于子对象,浅拷贝动作会把它当作一个公共镜像存储起来,所有对他的复制都被当成一个引用,所以说当其中一个引用将镜像改变了之后另一个引用使用镜像的时候镜像已经被改变了。对于子对象,深拷贝动作会将复杂对象的每一层复制一个单独的个体出来,因而二者完全独立。
import copy
list1 = [1,2,[3,4]]
print(list1)
list2 = copy.deepcopy(list1)
print(list2)
# list1.append(5)
# print(list1,list2)
list1[2].append(3.5)
print(list1,list2)
观察赋值结果:
import copy
list1 = [1,2,[3,4]]
list2 = copy.deepcopy(list1)
print(id(list1))
print(id(list2))
print(id(list1[0]))
print(id(list2[0]))
print(id(list1[2]))
print(id(list2[2]))
好了今天的分享就到这里了!
|