python:更改我的副本variables影响原始variables
我有一个列表,我创build了一个副本,以便做一些操作,同时仍然保留原始列表。 然而,当我设置copy_list等于org_list ,他们成为同样的事情,如果我改变copy_list , org_list改变。 例如: 
 org_list = ['y', 'c', 'gdp', 'cap'] copy_list = org_list copy_list.append('hum') print(copy_list) print(org_list) 
回报
 ['y', 'c', 'gdp', 'cap', 'hum'] ['y', 'c', 'gdp', 'cap', 'hum'] 
 我不太了解实际正在发生的事情,但是看起来org_list实际上将自己传递给了copy_list以便它们实际上是相同的事情。 
有没有办法做一个独立的副本的org_list而不做一些笨拙的事情:
 copy_list = [] for i in org_list: copy_list.append(i) 
我这样说是因为我和其他types的variables有相同的问题,例如一个pandas数据框。
这是因为在Python设置中,variables实际上设置了对variables的引用。 几乎每个学习python的人都会遇到这个问题。 解决方法是简单地复制列表:
 copy_list = org_list[:] 
这只是复制参考
 copy_list = org_list 
你应该使用
 copy_list = org_list[:] # make a slice that is the whole list 
要么
 copy_list = list(org_list) 
当你写
 org_list = ['y', 'c', 'gdp', 'cap'] 
你创build列表对象,并给它起名字“org_list”。
然后当你这样做
 copy_list = org_list 
你的意思是,“名称copy_list与org_list所指的对象相同”。
如果你的列表只包含不可变types,那么你可以通过创build一个副本
 copy_list = list(org_list) 
但是请注意,这只有在列表对象不可变的情况下才有效,因为它创build了一个SHALLOW副本,即列表被复制,但列表中的每个元素都不会被重复。
如果你有一个列表的列表,并希望一切都被复制,你需要执行一个DEEP副本:
 import copy org_list = ['y', 'c', ['gdp', 'rtd'], 'cap'] copy_list = copy.deepcopy(org_list) 
我在学习Python方面达到了你的水平,而且我正在(写)一个博客来修复概念。 写下来帮助我更好地理解。 这是我写的浅拷贝和深拷贝: http : //bioruffo.net/lpotf/bindings-shallow-copy-deep-copy/115/
python中的variables名称是对原始的引用。 要真正做一个副本,你需要明确 :
 import copy copy_list = copy.copy(org_list)