python中列表的副本跟不上变化

时间:2012-10-23 03:05:38

标签: python python-3.x

我有一个列表,我在程序运行时添加了项目,并且我已经创建了此列表的副本,因此我可以更改/修改/检查副本而不更改原始文件。

这是我到目前为止所得到的:

import copy
originallist.append(stuff)

combined=''.join(originallist)

copyoriginal=copy.deepcopy(originallist) 
##this didnt work as copyoriginal stayed empty [] while originallist would change.
#i also tried 
copyoriginal=list(originallist) 
#AND 
copyoriginal=originallist[:] 
#and with both cases copyoriginal remained at [] while originallist would change!!

为什么不改变?

3 个答案:

答案 0 :(得分:1)

列表副本不会跟踪对原始列表所做的更改;一旦复制完成,python的列表就会彼此完全分开。

如果没有自定义类,您无法尝试做什么。

答案 1 :(得分:0)

如果您想“跟上更改”到另一个列表,您可能需要考虑使用简单的引用而不是副本:

a = [1, 2, 3]
b = a # b refers to a

a[0] = 3
print b # prints [3, 2, 3]

如果您决定停止跟踪更改,可以随时制作副本:

b = b[:]

答案 2 :(得分:0)

如果您希望名称引用同一个对象,您可以这样做:

a = b = []
a.append(1)
b.append(2)
print(b)
# returns [1,2]

这不会让你改变其中一个而不影响另一个,但它会让你看到其中任何一个的变化。