我在使用copy模块下的deepcopy方法用错了姿势,或者说我对copy这个模块一无所知,导致使用的时候总是出现了各种各样的错误,在这里记录下我所遇到的问题以及我自己的解决方法。
can’t pickle module objects error
bug重现
import numpy as np
class A:
def __init__(self):
self.np = np
print('init the code')
def some(self):
print('run the method some')
a = A()
a.some()
import copy
# 会报错。TypeError: can't pickle module objects
a_copy = copy.deepcopy(a)
a_copy.some()
整个运行结果如下:
问题分析
在我们的代码中,我们把模块直接赋给了类的一个属性,导致这个类深度克隆失败,也就出现了can’t pickle module objects的错误。
如果我们把self.np = np这一个语句给去掉或者说把np换成一个不是模块对象,那么我们的代码就能够成功的跑起来了。