Python的pickle模块详解

Python的pickle模块实现了Python对象与字节流之间的二进制转换协议。即Python的pickle模块提供了Python对象的序列化/反序列化功能。

  • Pickling,即序列化,特指将Python对象转换为字节流的过程。
  • Unpickling,即反序列化,特指将字节流转换为Python对象的过程。

1. Python的pickle模块的组成

  • class PickleError(Exception)
  • class PicklingError(PickleError)
  • class UnpicklingError(PickleError)
  • class _Pickler
_Pickler(self, file, protocol=None, *, fix_imports=True)
DEFAULT_PROTOCOL = 3
HIGHEST_PROTOCOL = 4
  • class _Unpickler
_Unpickler(self, file, *, fix_imports=True, encoding="ASCII", errors="strict")
  • def _dump(obj, file, protocol=None, *, fix_imports=True)
  • def _dumps(obj, protocol=None, *, fix_imports=True)
  • def _load(file, *, fix_imports=True, encoding="ASCII", errors="strict")
  • def _loads(s, *, fix_imports=True, encoding="ASCII", errors="strict")


2. pickle模块与marshal模块的对比

pickle模块常常用于Python应用的开发过程中,序列化Python对象。而marshal模块更底层些,仅用于序列化Python的.pyc文件。
pickle模块会保留其序列化过的所有Python对象的track,在再次需要序列化该Python对象时,可以直接给出序列化后的字节流,而无需再次进行序列化。而marshal模块不能省略再次序列化的过程,每次都执行序列化操作。
pickle模块可以序列化用户定义的类。而marshal模块只能序列化Python内置类型。
pickle模块的序列化能够兼容不同的Python版本。而marshal模块不能也没必要保证兼容性。

3. pickle模块与json模块的对比
pickle模块实现的二进制转换协议与json模块实现的JSON格式转换协议完全不同。
JSON格式是一个文本序列化格式。pickle字节流格式是一个二进制序列化格式。
JSON是人可读的,而pickle字节流无法供人阅读。
JSON多用于与外部其他系统的交互,而pickle字节流仅供Python内部读写。
JSON只能表示Python内置类型,而pickle字节流可以表示开发人员定制类型。


4.序列化示例

import pickle

data = {
    'a': [1, 2.0, 3, 4+6j],
    'b': ("character string", b"byte string"),
    'c': {None, True, False}
}

with open('mydata.pickle', 'wb') as myfile:
    pickle.dump(data, myfile, pickle.HIGHEST_PROTOCOL)


5. 反序列化示例

import pickle

with open('mydata.pickle', 'rb') as myfile:
    data = pickle.load(myfile)


参考链接:

https://docs.python.org/3.5/library/pickle.html
https://github.com/python/cpython/blob/3.5/Lib/pickle.py

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值