pickle 转储的文件是否严格受 Python 的版本和实现限制?
Is the file dumped by pickle strictly limited by version and implementation of Python?
当我使用 pickle 将对象保存到文件时,当我更新 python 解释器(例如从 3.6.4 到 3.7.0r1)或更改 [= 的实现时文件是否会过期? 15=](例如从 cpython 到 pypy)?
如果有,是否有允许平台升级的兼容性范围?
或者有什么工具可以将这些转储文件转换为适应新平台?
不,没关系。唯一的问题是从 3.x 到 2.x,如 pickle.py. The latest pickle can read 所有以列出的版本之一编写的文件格式中所述(请注意 1.0 是最初的 pickle 实现):
- 1.0
- 1.1
- 1.2
- 1.3
- 2.0
- 3.0
- 4.0
在 IronPython 或 Jython 等 python 实现之间切换应该无关紧要,只要它们正确地实现了几乎所有标准库模块。
如果您只是在 python 3 的不同版本之间进行 pickling,那么您不会 运行 遇到任何默认协议问题。但是,如果你要求pickle文件被python 2读取,那么你可以在转储期间将pickle版本更改为0
,它可以被python 2和[=读取16=] 3.
我建议阅读文档,因为它有更多关于该主题的内容:https://docs.python.org/3/library/pickle.html
当我使用 pickle 将对象保存到文件时,当我更新 python 解释器(例如从 3.6.4 到 3.7.0r1)或更改 [= 的实现时文件是否会过期? 15=](例如从 cpython 到 pypy)?
如果有,是否有允许平台升级的兼容性范围? 或者有什么工具可以将这些转储文件转换为适应新平台?
不,没关系。唯一的问题是从 3.x 到 2.x,如 pickle.py. The latest pickle can read 所有以列出的版本之一编写的文件格式中所述(请注意 1.0 是最初的 pickle 实现):
- 1.0
- 1.1
- 1.2
- 1.3
- 2.0
- 3.0
- 4.0
在 IronPython 或 Jython 等 python 实现之间切换应该无关紧要,只要它们正确地实现了几乎所有标准库模块。
如果您只是在 python 3 的不同版本之间进行 pickling,那么您不会 运行 遇到任何默认协议问题。但是,如果你要求pickle文件被python 2读取,那么你可以在转储期间将pickle版本更改为0
,它可以被python 2和[=读取16=] 3.
我建议阅读文档,因为它有更多关于该主题的内容:https://docs.python.org/3/library/pickle.html