通过与现有列表相乘来创建一个新列表对象是否等同于进行深度复制?

时间:2018-07-27 00:56:35

标签: python list deep-copy

例如,假设我要复制名为a的列表b的深层副本:

a = [1,2,3,4,5]

两者之间是否有任何区别

import copy
b = copy.deepcopy(a)

和:

b = a*1  

在这两种情况下,我都创建了一个新对象(即id(a) == id(b)False),那么我应该理解任何实际的区别吗?谢谢!

1 个答案:

答案 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