Python:对我的副本变量的更改会影响原始变量。
Python:对我的副本变量的更改会影响原始变量。
该问题已有答案:
我有一个列表,我创建了一个副本来进行一些操作,并且仍然保持原始列表。然而,当我将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)
我这样说是因为我在其他类型的变量上也遇到了同样的问题,例如pandas数据框。
admin 更改状态以发布 2023年5月24日
当你写
org_list = ['y', 'c', 'gdp', 'cap']
你创建了一个列表对象,将其命名为“org_list”。
然后当你执行
copy_list = org_list
你的意思是,“名称copy_list指向与org_list相同的对象”。
如果你的列表只包含不可变类型,那么可以通过
copy_list = list(org_list)
创建一个副本,但请注意,这仅在列表对象是不可变的情况下有效,因为它创建了一个浅复制,即列表被复制,但列表上的每个元素并未复制。
如果你有一个包含列表的列表,想要复制全部内容,你需要执行深层复制:
import copy org_list = ['y', 'c', ['gdp', 'rtd'], 'cap'] copy_list = copy.deepcopy(org_list)