例如,假设我要复制名为a
的列表b
的深层副本:
a = [1,2,3,4,5]
两者之间是否有任何区别
import copy
b = copy.deepcopy(a)
和:
b = a*1
在这两种情况下,我都创建了一个新对象(即id(a) == id(b)
是False
),那么我应该理解任何实际的区别吗?谢谢!
答案 0 :(得分:4)
不,它们不是等效的。乘法运算符仅生成浅表副本。深拷贝意味着列表中的引用也会被复制(即创建新的引用),而浅拷贝则仅复制顶级引用的新副本,而不复制其中的引用,如下所示:>
import copy
a = [[],[]]
b = copy.deepcopy(a)
c = a * 1
for i, v in enumerate(a):
print(id(v), id(b[i]), id(c[i]))
这将输出:
31231832 31261480 31231832
31260800 31261400 31260800