首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >泡菜和_pickle在python 3中有什么区别?

泡菜和_pickle在python 3中有什么区别?
EN

Stack Overflow用户
提问于 2013-10-04 22:40:25
回答 2查看 22.1K关注 0票数 35

我是python中的新手,希望实现快速对象序列化。我试着使用json,但是它太慢了,也试图使用marshall模块,但是由marshall序列化的对象的大小是泡菜的6-7倍,所以我决定在我的项目中使用泡菜。我读到了cPickle模块,读得很快,但是python 3中没有这样的模块,而docs说_pickle模块是用C编写的,所以在我的项目中我使用

代码语言:javascript
复制
import _pickle as pickle

泡菜和_pickle有什么区别吗?如何实现更快的对象序列化/反序列化?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-04 22:43:21

如果可用,pickle模块已经导入_pickle。它是pickle模块的C优化版本,并且使用透明.

来自源代码

代码语言:javascript
复制
# Use the faster _pickle if possible
try:
    from _pickle import *
except ImportError:
    Pickler, Unpickler = _Pickler, _Unpickler

来自模块文档

pickle模块有一个用C编写的透明优化器(_pickle)。否则,将使用纯Python实现。

在Python2中,_pickle被称为cPickle,但是已经进行了更新,允许透明地使用它作为实现细节。

票数 59
EN

Stack Overflow用户

发布于 2013-10-04 22:43:32

来自图书馆变更文档的https://docs.python.org/3.1/whatsnew/3.0.html#what-s-new-in-python-3-0部分:

Python2.x中的一个常见模式是使用纯Python实现模块的一个版本,并将一个可选的加速版本作为C扩展实现;例如,picklecPickle。这就给这些模块的每个用户带来了导入加速版本和返回纯Python版本的负担。在Python3.0中,加速版本被认为是纯Python版本的实现细节。用户应该始终导入标准版本,标准版本试图导入加速版本,然后返回到纯版本。pickle cPickle / 对接受了这种治疗。配置文件模块在3.1的列表中。StringIO模块已被转化为io模块中的一个类。

由于使用下划线加上实现细节是python的约定,所以cPickle变成了_pickle。值得注意的是,这意味着如果您要导入_pickle,API没有保证的契约,并且可能会在python3的未来版本中破坏向后兼容性,尽管这可能是不可能的。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19191859

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档