python:更改我的副本variables影响原始variables

我有一个列表,我创build了一个副本,以便做一些操作,同时仍然保留原始列表。 然而,当我设置copy_list等于org_list ,他们成为同样的事情,如果我改变copy_listorg_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)