【发布时间】:2011-05-23 17:31:41
【问题描述】:
我想在 python 中创建另一个列表的备份列表。这是代码示例。
x = [1,2,3]
y = x
x.pop(0)
print y
然而,当我希望它产生 [1,2,3] 时,这会产生结果 y = [2,3]。我将如何使 y 列表独立于 x 列表?
【问题讨论】:
我想在 python 中创建另一个列表的备份列表。这是代码示例。
x = [1,2,3]
y = x
x.pop(0)
print y
然而,当我希望它产生 [1,2,3] 时,这会产生结果 y = [2,3]。我将如何使 y 列表独立于 x 列表?
【问题讨论】:
对此的一个常见习惯用法是y = x[:]。这会生成x 的浅表副本并将其存储在y 中。
请注意,如果x 包含对对象的引用,y 也将包含对相同对象的引用。这可能是也可能不是您想要的。如果不是,请查看copy.deepcopy()。
【讨论】:
l[:]是一个常见的成语。
【讨论】:
copy.copy 会在这种情况下完成这项工作。
虽然 aix 在这里给出了最简洁的答案,但为了完整起见,您也可以这样做:
y = list(x)
这将强制创建一个新列表,并清楚地表明您要做什么。我自己可能会这样做。但请注意 - 它不会进行深层复制(因此所有元素都是相同的引用)。
如果您想确保 y 没有发生任何事情,您可以将其设为元组 - 这将防止删除和添加元素。如果你想这样做:
y = tuple(x)
作为最后的选择,您可以这样做:
y = [a for a in x]
这是复制的列表理解方法(非常适合进行基本的转换或过滤)。所以说真的,你有很多选择。
【讨论】: