copy.copy()如何在python中工作?

时间:2018-08-08 09:43:29

标签: python copy

我在shell中尝试了以下情形。

root(index){
    while(this.array[index] !== index) index = this.array[index];
    return index;
}

为什么复制应该创建引用时a和cp为什么不同? 而这另一种情况按预期工作。

import copy
a = [1, 2, [3, 4], 5]
cp = copy.copy(a)
a.append(6)
print a # [1, 2, [3, 4], 5, 6]
print cp # [1, 2, [3, 4], 5]

差异背后的逻辑是什么?

1 个答案:

答案 0 :(得分:3)

来自docs

  

浅表副本构造一个新的复合对象,然后(到   在可能的范围内)将引用插入其中   原始的。

因此,在复制cp后指向一个 new 列表对象,但是cp[2]仍然是对该列表a[2]引用 。您可以使用id()函数进行验证:

>>> import copy
>>> a = [1, 2, [3, 4], 5]
>>> cp = copy.copy(a)
>>> id(a) == id(cp)
False
>>> id(a[2]) == id(cp[2])
True

deepcopy()比较:

>>> cp2 = copy.deepcopy(a)
>>> id(a) == id(cp2)
False
>>> id(a[2]) == id(cp2[2])
False