-2

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

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

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!!

为什么不改变?

4

3 回答 3

1

列表的副本不会跟随对原始列表所做的更改;一旦制作了副本,python 的列表就会完全分开。

如果没有自定义类,您尝试做的事情是不可能的。

于 2012-10-23T03:07:59.563 回答
0

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

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

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

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

b = b[:]
于 2012-10-23T03:21:13.510 回答
0

如果你想命名引用同一个对象,你可以这样做:

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

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

于 2012-10-23T03:22:11.390 回答