python浅拷贝和深拷贝
python中对对象直接赋值其实只是将其换了一个名字,想要对对象进行真正的复制要通过别的方法。
浅拷贝
浅拷贝利用copy()函数就可以实现,它会产生新的对象
l=[1,2,3,4]
l2=l.copy()
print(l,l2)
l.append(5)
print(l,l2)
#[1, 2, 3, 4] [1, 2, 3, 4]
#[1, 2, 3, 4, 5] [1, 2, 3, 4]
这样对原来的列表进行操作不会影响到新列表,如果直接采用赋值的方法则会影响到新的列表。
但是浅拷贝产生的新对象的子类还是指向原对象
l=[[1,2],[3,4]]
l2=l.copy()
print(l,l2)
l.append(5)
print(l,l2)
l[1].append(6)
print(l,l2)
#[[1, 2], [3, 4]] [[1, 2], [3, 4]]
#[[1, 2], [3, 4], 5] [[1, 2], [3, 4]]
#[[1, 2], [3, 4, 6], 5] [[1, 2], [3, 4, 6]]
对原对象元素的操作还会影响到新对象,所以想对子对象进行操作而不影响新对象就要用到深拷贝。
深拷贝
深拷贝需要用到copy模块中的deepcopy()函数
import copy
l=[[1,2],[3,4]]
l2=copy.deepcopy(l)
print(l,l2)
l.append(5)
print(l,l2)
l[1].append(6)
print(l,l2)
#[[1, 2], [3, 4]] [[1, 2], [3, 4]]
#[[1, 2], [3, 4], 5] [[1, 2], [3, 4]]
#[[1, 2], [3, 4, 6], 5] [[1, 2], [3, 4]]
深拷贝之后对原对象元素的操作就不会影响新对象
深拷贝与浅拷贝的区别便是,浅拷贝拷贝父对象,不会拷贝对象内部的子对象,而深拷贝完全拷贝了父对象和子对象。
标签:python,对象,l2,print,拷贝,copy,append From: https://www.cnblogs.com/102204216zxf/p/16969593.html