该pickle模块实现了用于序列化和反序列化python对象结构的二进制协议。 “Pickling”是将Python对象层次结构转换为字节流的过程, “unpickling”是反向操作,从而将字节流(来自二进制文件或类似字节的对象)转换回对象层次结构。
举个例子:
import pickle
li = [1, 2, 3]
p = pickle.dumps(li)
print(type(p))
print(p)
.......
<class 'bytes'>
b'\x80\x03]q\x00(K\x01K\x02K\x03e.'
这里dumps()就是把任意对象序列化为一个bytes,让它转化后保存到内存中.
同样反过来,就是反序列化,把bytes流转化为我们可以看懂的char
p = pickle.loads(d)
print(type(p))
print(p)
......
<class 'list'>
[1, 2, 3]
这种是操作文件使用的,使用过json.dump这类属性的应该明白
举个例子
转化为字节流写入文件
# 在dump()括号中按ctrl+p可以看到提示,第一个属性就是file对象,而dumps()第一个是bytes_object属性
f = open('dump.txt', 'wb')
pickle.dump(d, f)
f.close()
......
�C�]q (KKKe.q .
把字节流转化为普通字节
f = open('dump.txt', 'rb')
d = pickle.load(f)
f.close()
......
[1, 2, 3]
pickle协议和JSON之间存在根本区别 :
目前有5种不同的方案可用于酸洗。协议使用的越高,读取生成的pickle所需的Python版本就越新。