在 Python 开发中,我们经常需要把运行时的对象保存下来,或者在程序重启后恢复之前的状态,例如:
pickle 模块正是 Python 为解决这类问题提供的官方内置方案。
pickle
Python 的 pickle 模块是一个用于序列化和反序列化 Python 对象的标准库模块。
在开始使用 Pickle 之前,需要理解两个核心概念:
pickle 模块可以将几乎所有的 Python 对象(如列表、字典、类实例等)保存到文件中,或者通过网络传输,然后在需要时重新加载。
为什么使用 Pickle 模块?
Pickle 的典型使用场景
pickle 非常适合以下场景:
不适合的场景:
Pickle 支持哪些对象?
1. 支持的对象类型
不支持或不推荐的对象
导入模块
使用 Pickle 模块非常简单,只需要导入即可:
import pickle
Pickle 模块的基本用法
1. 序列化对象
使用 pickle.dump() 方法可以将 Python 对象序列化并保存到文件中。
pickle.dump()
'wb'
data
2. 反序列化对象
使用 pickle.load() 方法可以从文件中加载并反序列化 Python 对象。
pickle.load()
'rb'
3.序列化到字节串
如果不想保存到文件,可以使用 pickle.dumps() 将对象序列化为字节串:
4. 从字节串反序列化
使用 pickle.loads() 可以从字节串反序列化对象:
5. 可以序列化的对象类型
Pickle 可以序列化大多数 Python 对象,包括:
6. 序列化自定义类
Pickle 可以很好地处理自定义类的实例:
7. 序列化多个对象
可以多次调用 pickle.dump() 来保存多个对象:
8. 实际应用示例
示例1:保存和加载机器学习模型配置
示例2:缓存计算结果
Pickle 模块的注意事项
json
msgpack
高级用法:自定义对象的序列化
pickle 模块支持自定义类的序列化。默认情况下,pickle 会保存对象的属性和类名。如果需要更复杂的序列化逻辑,可以在类中实现 __getstate__() 和 __setstate__() 方法。
__getstate__()
__setstate__()
pickle 模块常用方法
pickle.dump(obj, file)
pickle.dump(data, open('data.pkl', 'wb'))
pickle.load(file)
data = pickle.load(open('data.pkl', 'rb'))
pickle.dumps(obj)
bytes_data = pickle.dumps([1, 2, 3])
pickle.loads(bytes)
lst = pickle.loads(bytes_data)
pickle.HIGHEST_PROTOCOL
pickle.dump(..., protocol=pickle.HIGHEST_PROTOCOL)
pickle.DEFAULT_PROTOCOL
pickle.dumps(obj, protocol=pickle.DEFAULT_PROTOCOL)
1. 序列化对象到文件
2. 从文件反序列化
3. 序列化为字节串(网络传输/缓存)
pickle 模块协议版本