根据文件:What can be pickled and unpickled?

The following types can be pickled:None, True, and False

integers, floating point numbers, complex numbers

strings, bytes, bytearrays

tuples, lists, sets, and dictionaries containing only picklable objects

functions defined at the top level of a module (using def, not lambda)

built-in functions defined at the top level of a module

classes that are defined at the top level of a module

instances of such classes whose __dict__ or the result of calling __getstate__() is picklable (see section Pickling Class Instances for details).

如您所见,模块不在列表中。注意,这在使用deepcopy时也是正确的,而且不仅适用于pickle模块,如deepcopy文档中所述:This module does not copy types like module, method, stack trace, stack frame, file, socket, window, array, or any similar types. It does “copy” functions and classes (shallow and deeply), by returning the original object unchanged; this is compatible with the way these are treated by the pickle module.

可能的解决方法是使用@property装饰器而不是属性。

例如,这应该有效:import numpy as np

import pickle

class Foo():

@property

def module():

return np

foo = Foo()

with open('test.out', 'wb') as f:

pickle.dump(foo, f)

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐