通过将现有列表乘以 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
例如,假设我想对列表 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