python:my copy变量的更改会影响原始变量b

2024-10-02 22:25:32 发布

您现在位置: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,所以它们实际上是一样的。

有没有一种方法可以制作一份独立的组织列表副本,而不必做一些笨拙的事情,比如:

copy_list = []
for i in org_list:
    copy_list.append(i)

我这么说是因为我对其他类型的变量也有同样的问题,例如pandas数据框。


Tags: 方法inorg类型列表for副本事情
3条回答

这只是复制参考资料

copy_list = org_list

你应该用

copy_list = org_list[:]    # make a slice that is the whole list

或者

copy_list = list(org_list)

这是因为在python中设置变量实际上设置了对该变量的引用。几乎每个学习python的人都会在某个时候遇到这种情况。解决方案只是复制列表:

copy_list = org_list[:] 

当你写作时

org_list = ['y', 'c', 'gdp', 'cap']

创建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)

相关问题 更多 >