dill 与 Python 的 pickle 模块有何不同?

Hol*_*ock 1 python pickle python-3.x dill

我的 Python3 代码中有一个大对象,当尝试使用该pickle模块进行腌制时,会引发以下错误:

TypeError: cannot serialize '_io.BufferedReader' object
Run Code Online (Sandbox Code Playgroud)

但是,dill.dump()并且dill.load()能够无缝地保存和恢复对象。

  1. pickle模块故障的原因是什么?
  2. 现在dill保存和重建对象没有任何错误,有什么方法可以验证酸洗和解酸是否dill顺利?
  3. 怎么可能pickle失败,但dill成功了?

Mik*_*rns 9

我是dill作者。

1) 最简单的方法是查看这个文件:https : //github.com/uqfoundation/dill/blob/master/dill/_objects.py,它列出了pickle可以序列化的内容以及dill可以序列化的内容。

2)你可以尝试dill.copydill.checkdill.pickles检查不同层次的封装状态的。dill还更包括用于检测和诊断序列化问题的实用程序dill.detectdill.pointers

3)dill建立在 之上pickle,并通过注册新的序列化函数来增强它。

4)dill包括序列化变体,使用户能够从不同的对象依赖序列化策略(in dill.settings)中进行选择——包括源代码提取和对象重构dill.source(以及 stdlibinspect模块的扩展)。

  • 为什么莳萝不合并到泡菜中? (5认同)