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)