我是python中的新手,希望实现快速对象序列化。我试着使用json,但是它太慢了,也试图使用marshall模块,但是由marshall序列化的对象的大小是泡菜的6-7倍,所以我决定在我的项目中使用泡菜。我读到了cPickle模块,读得很快,但是python 3中没有这样的模块,而docs说_pickle模块是用C编写的,所以在我的项目中我使用
import _pickle as pickle泡菜和_pickle有什么区别吗?如何实现更快的对象序列化/反序列化?
发布于 2013-10-04 22:43:21
发布于 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扩展实现;例如,
pickle和cPickle。这就给这些模块的每个用户带来了导入加速版本和返回纯Python版本的负担。在Python3.0中,加速版本被认为是纯Python版本的实现细节。用户应该始终导入标准版本,标准版本试图导入加速版本,然后返回到纯版本。picklecPickle/ 对接受了这种治疗。配置文件模块在3.1的列表中。StringIO模块已被转化为io模块中的一个类。
由于使用下划线加上实现细节是python的约定,所以cPickle变成了_pickle。值得注意的是,这意味着如果您要导入_pickle,API没有保证的契约,并且可能会在python3的未来版本中破坏向后兼容性,尽管这可能是不可能的。
https://stackoverflow.com/questions/19191859
复制相似问题