pickle模块简介
- pickle模块实现了用于序列化和反序列化Python对象结构的二进制协议。
- “Pickling”是将Python对象层次结构转换为字节流的过程, “unpickling”是反向操作,从而将字节流(来自二进制文件或类似字节的对象)转换回对象层次结构。
- 使用的数据格式pickle是特定于Python的,意味着非Python程序可能无法重建pickle Python对象。
直观理解:
pickle模块就是把对象(list,set,dict,object等对象)编码成二进制(为了存储),同时又可以从二进制(缓存或者文件里)加载即解码回来成原先的对象。
注意:要是自定义类对象(非list,set,dict等吧内置类)需要先定义好,再加载load,否则会报错找不到类
其它类似模块:
marshal:
Python有一个更原始的序列化模块marshal,但通常pickle应该始终是序列化Python对象的首选方法。 marshal主要用于支持Python的.pyc 文件。
比较:
- 该pickle模块跟踪它已经序列化的对象,以便稍后对同一对象的引用不会再次序列化。 marshal不这样做。
- marshal不能用于序列化用户定义的类及其实例。 pickle可以透明地保存和恢复类实例,但是类定义必须是可导入的,并且与存储对象时存在于同一模块中。
- 该marshal序列化格式是不能保证整个Python版本移植。因为它的主要工作是支持
.pyc文件,所以Python实施者保留在需要时以非向后兼容的方式更改序列化格式的权利。该pickle序列化格式是保证不同的Python版本向后兼容。
json:
- JSON是一种文本序列化格式(它输出unicode文本,虽然大部分时间它被编码utf-8),而pickle是二进制序列化格式;
- JSON是人类可读的,而pickle不是;
- JSON是可互操作的,并且在Python生态系统之外广泛使用&#x