python list.copy浅vs深拷贝
这个问题在这里已经有了答案:
在这种情况下,你简单地误解了“浅”和“深”的含义。
浅拷贝只是元素顶层的副本。 如果这些元素中的任何一个都是自己的列表,这些副本仍然会引用原始列表。 这是l1[:]
和l1.copy()
所做的。
深层副本是各级副本。 如果任何元素是列表,它们也将被深度复制。 将不会分享任何参考。 这是copy.deepcopy()
所做的。
浅拷贝意味着新列表保存对旧列表所具有的相同对象的引用。
例如:
foo = [1, 2, []]
bar = foo.copy()
bar[-1].append(3)
print(foo)
我们会看到bar
的物体突变也“污染” foo
。
如果我们使用深层副本重新执行此示例,则会有所不同:
import copy
foo = [1, 2, []]
bar = copy.deepcopy(foo)
bar[-1].append(3)
print(foo)
这是因为深层副本创建列表的新(深层副本),而不是仅复制到旧列表的引用。
链接地址: http://www.djcxy.com/p/79355.html