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