Python-AttributeError:';功能';对象没有属性';深度复制';
我有一个可变对象列表,它是一个类的属性Python-AttributeError:';功能';对象没有属性';深度复制';,python,Python,我有一个可变对象列表,它是一个类的属性 self.matriceCaracteristiques 我想保留它的一个副本,以便对象在执行过程中与原始列表一样发生更改,但不改变它们在列表本身中的顺序(这就是我希望在执行后保留和“恢复”的内容) 当恢复列表时,我尝试了以下操作: self.matriceCaracteristiques = copy_of_matCar[:] 但是它不起作用,因为尽管_matCar的副本有不同的顺序(特别是,属性在某些代码执行之前的顺序),但另一个自身的矩阵特征保持
self.matriceCaracteristiques
我想保留它的一个副本,以便对象在执行过程中与原始列表一样发生更改,但不改变它们在列表本身中的顺序(这就是我希望在执行后保留和“恢复”的内容)
当恢复列表时,我尝试了以下操作:
self.matriceCaracteristiques = copy_of_matCar[:]
但是它不起作用,因为尽管_matCar的副本有不同的顺序(特别是,属性在某些代码执行之前的顺序),但另一个自身的矩阵特征保持完全相同,尽管指令。
因此,我想通过遵循Python参考来制作它的deepcopy:
import copy
self.matriceCaracteristiques = copy.deepcopy(copy_of_matCar)
但是,我得到的是以下错误:
self.matriceCaracteristiques = copy.deepcopy(copy_of_matCar)
AttributeError: 'function' object has no attribute 'deepcopy'
你知道我该如何解决这个问题并获得matCar的列表
copy\u
的deepcopy以分配给self.matriceCaracteristiques
one吗 我也面临同样的问题,并且尝试了很多方法。
以下方法解决了我的问题:
改变
到
评论中建议的是问题的根源:在导入
复制
模块后,模块中有阴影
例如,考虑以下模块:
# 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'
您是否在程序中的某个位置将另一个函数命名为“copy”?请尝试将您的导入替换为“from copy import deepcopy”,然后将调用更改为“deepcopy(copy_of_matCar)”,看看这是否有帮助。有什么东西正在隐藏
copy
对象。如果我在控制台中键入导入副本
,然后键入copy.deepcopy
,我将得到
我无法复制您的错误。您遗漏了一些相关的代码。@MatteoNNZ:我很难理解您对deepcopy
的期望deepcopy
将创建列表的新深度副本copy\u of_matCar
。这意味着一个具有相同值的新列表,但不引用任何其他列表。这是你想要的吗?
from copy import deepcopy
dict = {...}
deepcopy()
# 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
AttributeError: 'function' object has no attribute 'deepcopy'