【发布时间】:2010-07-20 12:22:34
【问题描述】:
如何在 Python 中复制列表的内容而不仅仅是对列表的引用?
【问题讨论】:
标签: python list reference copy
如何在 Python 中复制列表的内容而不仅仅是对列表的引用?
【问题讨论】:
标签: python list reference copy
查看copy module,注意浅拷贝和深拷贝的区别:
浅拷贝和深拷贝之间的区别仅与复合对象(包含其他对象,如列表或类实例的对象)有关:
浅拷贝构造一个新的复合对象,然后(在可能的范围内)向其中插入对原始对象的引用。
深拷贝构造一个新的复合对象,然后递归地将在原始对象中找到的对象的副本插入其中。
【讨论】:
使用切片表示法。
newlist = oldlist
这将为同一个列表分配第二个名称
newlist = oldlist[:]
这会将 oldlist 的每个元素复制到一个名为 newlist 的完整新列表中
【讨论】:
除了 Lizard 提到的切片符号,
你可以使用list()
newlist = list(oldlist)
或复制
import copy
newlist = copy.copy(oldlist)
【讨论】:
Lizard 和 gnibbler 的回答是正确的,但我想补充一点,所有这些方法都提供了一个浅拷贝,即:
l = [[]]
l2 = l[:] // or list(l) or copy.copy(l)
l2[0].append(1)
assert l[0] == [1]
对于深拷贝,您需要 copy.deepcopy()。
【讨论】: