通过将现有列表乘以 1 来创建新列表对象是否等同于进行深度复制?

Is creating a new list object via multiplication by one with an existing list equivalent to making a deep copy?

例如,假设我想对列表 a 进行深度复制,称为 b:

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

有什么区别吗:

import copy
b = copy.deepcopy(a)

和:

b = a*1  

在这两种情况下,我都创建了一个新对象(即 id(a) == id(b)False),那么我应该了解哪些实际差异?谢谢!

不,它们不等同。乘法运算符只生成一个浅拷贝。深拷贝意味着列表中的引用也被复制(即创建新的引用),而浅拷贝只创建顶层引用的新副本而不是内部的引用,如下所示:

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