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'