[英]What difference between pickle and _pickle in python 3?
我是python的新手,想要实现快速对象序列化。 我试图使用json,但它太慢了,也试图使用马歇尔模块,但是由马歇尔序列化的对象大小比pickle多6-7倍,所以我决定在我的项目中使用pickle。 我读了一下cPickle模块,读得很快,但python 3中没有这样的模块,docs说名为_pickle的模块是用C语言编写的。所以在我的项目中我使用
import _pickle as pickle
pickle和_pickle之间有什么区别吗? 我如何实现更快的对象序列化/反序列化?
pickle
模块已经导入_pickle
如果可用)。 它是pickle
模块的C优化版本,透明使用。
来自pickle.py
源代码 :
# Use the faster _pickle if possible
try:
from _pickle import *
except ImportError:
Pickler, Unpickler = _Pickler, _Unpickler
并从pickle
模块文档 :
pickle
模块有一个用C_pickle
编写的透明优化器(_pickle
)。只要可用,它就会被使用。 否则使用纯Python实现。
在Python 2中, _pickle
被称为cPickle
,但已更新为允许透明用作实现细节。
从什么是新的Python 3.0文档的库更改部分:
Python 2.x中的一个常见模式是在纯Python中实现一个模块版本,并将可选的加速版本实现为C扩展; 例如,
pickle
和cPickle
。 这会导致导入加速版本的负担,并在这些模块的每个用户上回退到纯Python版本。 在Python 3.0中,加速版本被认为是纯Python版本的实现细节。 用户应始终导入标准版本,该版本尝试导入加速版本并回退到纯Python版本。pickle
/cPickle
对接受了这种治疗。 配置文件模块位于3.1的列表中。StringIO
模块已经变成了io模块中的一个类。
由于它是一个python约定,实现细节以下划线为前缀,因此cPickle
变为_pickle
。 值得注意的是,这意味着如果您要导入_pickle
,那么API没有保证合同,并且可能会在未来的python3版本中破坏向后兼容性,尽管可能性不大。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.