Python - AttributeError:'function'对象没有属性'deepcopy'

问题描述 投票:4回答:2

我有一个可变对象列表,它是类的一个属性。

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一个?

python
2个回答
7
投票

我面临同样的问题,并尝试了很多方法。以下方式解决了我的问题:改变

import copy
dict = {...}
copy.deepcopy()

from copy import deepcopy
dict = {...}
deepcopy()

1
投票

评论中提出的是问题的根源:在导入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'
© www.soinside.com 2019 - 2024. All rights reserved.