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

时间:2014-01-27 08:15:26

标签: python

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

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进行深度复制吗?

2 个答案:

答案 0 :(得分:7)

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

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

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

答案 1 :(得分:1)

评论中建议的是问题的根源:模块中有services.AddIdentity<Usuarios, IdentityRole>(options => { if (usersConfiguration.PasswordLongitud.HasValue) options.Password.RequiredLength = usersConfiguration.PasswordLongitud.Value; if (usersConfiguration.CantidadIntentosLogin.HasValue) options.Lockout.MaxFailedAccessAttempts = usersConfiguration.CantidadIntentosLogin.Value; options.Password.RequireLowercase = usersConfiguration.PasswordRequiereMinusculas; options.Password.RequireUppercase = usersConfiguration.PasswordRequiereMayusculas; options.Password.RequireNonAlphanumeric = usersConfiguration.PasswordRequiereCaracteresRaros; options.Password.RequireDigit = usersConfiguration.PasswordRequiereNumeros; options.SignIn.RequireConfirmedEmail = usersConfiguration.UsuarioRequiereConfirmacionMail; }) 的阴影, 导入{{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 。这意味着它现在隐藏了导入上面4行的模块some_module_1。因此python正确地抱怨copy不是函数copy的属性,因此错误

deepcopy