python中列表的副本不';我跟不上变化
我有一个在程序运行时添加项目的列表,并且我已经创建了该列表的副本,因此我可以在不更改原始列表的情况下更改/修改/检查副本 到目前为止,我得到的是:python中列表的副本不';我跟不上变化,python,python-3.x,Python,Python 3.x,我有一个在程序运行时添加项目的列表,并且我已经创建了该列表的副本,因此我可以在不更改原始列表的情况下更改/修改/检查副本 到目前为止,我得到的是: import copy originallist.append(stuff) combined=''.join(originallist) copyoriginal=copy.deepcopy(originallist) ##this didnt work as copyoriginal stayed empty [] while origin
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!!
为什么不更改?列表的副本不会跟随对原始列表的更改;一旦复制完成,python的列表就完全独立了
没有自定义类,你想做的事情是不可能的。
如果你想“跟上变化”到另一个列表,你可能想考虑使用一个简单的引用而不是一个拷贝:a = [1, 2, 3]
b = a # b refers to a
a[0] = 3
print b # prints [3, 2, 3]
当您决定停止跟踪更改时,始终可以稍后进行复制:
b = b[:]
如果希望名称引用同一对象,可以执行以下操作:
a = b = []
a.append(1)
b.append(2)
print(b)
# returns [1,2]
这不会让你改变其中一个而不影响另一个,但它会让你看到其中任何一个的变化。我认为你走对了方向,但肯定还有其他事情在发生。如果
原创列表
是从里面的东西开始的,那么你所说的“copyoriginal保持为空[]”到底是什么意思?一个更具体的例子会很有帮助,包括实际输出和您的预期输出。您好,感谢您的快速回复!我的意思是,当我调试程序时,它向我显示copyoriginal是[](将鼠标悬停在它上面,而originallist中有值[2,6]ohhh那么有没有其他方法让python保持对原始列表的更改并将其复制到复制列表?或者唯一的方法是在我每次向原始列表添加值时保持对原始列表的复制..?谢谢advance@3MIN3M:完全正确。完成更改后,请复制原始列表,或同时对两个列表进行更改sts。