我有一个可变对象列表,它是类的一个属性。
self.matriceCaracteristiques
我想保留它的副本,以便在执行期间对象将像原始列表一样改变,但不是它们在列表本身中的顺序(这是我想保留的并且在执行后“恢复”)。
copy_of_matCar = self.matriceCaracteristiques[:] #to preserve the order of the objects
#that will be changed during execution
什么时候恢复列表,我试过这个:
self.matriceCaracteristiques = copy_of_matCar[:]
但它不起作用,因为虽然copy_of_matCar
有一个不同的顺序(具体来说,属性在某些代码执行之前有一个),其他self.matriceCaracteristiques
仍然完全相同,尽管指令。所以我想通过遵循Python参考来对它进行深度复制:
import copy
self.matriceCaracteristiques = copy.deepcopy(copy_of_matCar)
但是,我得到的是以下错误:
self.matriceCaracteristiques = copy.deepcopy(copy_of_matCar)
AttributeError: 'function' object has no attribute 'deepcopy'
知道如何解决这个问题,并获得列表copy_of_matCar
的深度复制分配给self.matriceCaracteristiques
一个?
我面临同样的问题,并尝试了很多方法。以下方式解决了我的问题:改变
import copy
dict = {...}
copy.deepcopy()
至
from copy import deepcopy
dict = {...}
deepcopy()
评论中提出的是问题的根源:在导入copy
模块后,模块中有一些阴影copy
。
例如,考虑以下模块:
# In some_module_1.py
from copy import copy
# In some_module_2.py
import copy
# `copy` refers to the module, as expected
print('deepcopy' in dir(copy)) # True
from some_module_1 import *
# `copy` got shadowed, it is now actually referring to `copy.copy`
print('deepcopy' in dir(copy)) # False
因为我从some_module_1
导入了所有东西,我还导入了我在那里导入的函数copy
。这意味着它现在阴影模块copy
导入上面的4行。因此python正确地抱怨deepcopy
不是函数copy.copy
的属性,因此错误
AttributeError: 'function' object has no attribute 'deepcopy'