创建一个新的列表对象是通过乘以一个现有的列表相当于进行深层复制吗?

问题描述 投票:2回答:1

例如,假设我想制作一个名为a的列表b的深层副本:

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

之间有什么区别:

import copy
b = copy.deepcopy(a)

和:

b = a*1  

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

python list deep-copy
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.