【发布时间】:2013-04-22 13:17:50
【问题描述】:
在通过重新编译脚本更新类定义后,pickle 拒绝序列化该类先前实例化的对象,并给出错误:“Can't pickle object: it's not the same object as”
有没有办法告诉 pickle 它应该忽略这种情况?要仅按名称识别类,请忽略导致不匹配的内部唯一 ID?
我绝对欢迎作为答案的替代等效模块的建议,它以方便和稳健的方式解决了这个问题。
作为参考,这是我的动机:
我正在创建一个高生产力、快速迭代的开发环境,可以在其中实时编辑 Python 脚本。脚本被反复重新编译,但数据在编译过程中仍然存在。作为生产力目标的一部分,我尝试使用 pickle 进行序列化,以避免为不断变化的数据结构而编写和更新显式序列化代码的成本。
我主要序列化内置类型。我小心地避免对我腌制的类进行有意义的更改,并在必要时使用 copy_reg.pickle 机制对 unpickle 执行上转换。
脚本重新编译完全阻止我腌制对象,即使类定义实际上没有改变(或只是以良性方式改变)。
【问题讨论】:
-
我没有花太多时间在这方面,但这可能很有用:docs.python.org/2/library/…
标签: python pickle recompile hotswap