首页 > 编程语言 >python浅拷贝和深拷贝

python浅拷贝和深拷贝

时间:2022-12-09 17:44:15浏览次数:30  
标签:python 对象 l2 print 拷贝 copy append

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

相关文章