浅而深的复制

时间:2013-12-20 08:18:19

标签: python-2.7 copy

浅层和深层复制的区别是什么? 我读了python docs(http://docs.python.org/2/library/copy.html)。它基本上表示浅拷贝会在深度复制实际复制时进行引用。所以我通过浅层复制创建了一个列表并更改了它的值。但是这些更改没有反映在原始列表中。那么如果浅层复制适用于引用? (仅供记录,我使用的是python 2.7.5)

>>>li = [1,2,3,4]
>>> x = copy(li)
>>> x
[1, 2, 3, 4]
>>> x[0]=9
>>> x
[9, 2, 3, 4]
>>> li
[1, 2, 3, 4]

2 个答案:

答案 0 :(得分:0)

copy创建列表的副本,但不复制其元素。新列表包含对原始列表元素的引用。

deepcopy创建了所有内容的单独副本。

请参阅:

import copy

li = [[1], 2]
x = copy.copy(li)
x[0][0] = 2
x[1] = 3
print li
print x

答案 1 :(得分:0)

复制构造函数用于使用先前创建的同一类对象初始化新对象。默认情况下编译器写了一个浅拷贝。当没有涉及动态内存分配时,浅拷贝工作正常,因为当涉及动态内存分配时,两个对象都将指向堆中的相同内存位置。因此,为了消除此问题,我们编写了深层副本,因此两个对象都有自己的属性副本在记忆中。为了通过完整的示例和解释阅读详细信息,您可以看到本文关于difference between Shallow and Deep copy constructors的部分。