Skip to content
字数
757 字
阅读时间
3 分钟

Pickle 是一种 Python 特定的二进制序列化格式。 它允许您将 Python 对象(例如列表、字典、自定义类的实例等)转换为字节流,这个过程称为“pickling”或“封存”。 这个字节流可以被存储在文件中或通过网络传输,之后可以被反序列化(称为“unpickling”或“解封”)以重建原始的 Python 对象。

核心概念:

  • 序列化 (Serialization/Pickling): 将 Python 对象层次结构转换为字节流的过程。
  • 反序列化 (Deserialization/Unpickling): 将字节流转换回原始 Python 对象层次结构的过程。

Pickle 格式的特点:

  • Python 特定: Pickle 格式是为 Python 设计的,这意味着非 Python 程序可能无法正确地重建被 pickle 化的 Python 对象。
  • 二进制格式: 与人类可读的文本格式(如 JSON)不同,Pickle 是一种二进制序列化格式。 直接用文本编辑器打开 pickle 文件会显示乱码。
  • 支持多种数据类型: Pickle 几乎可以序列化所有的 Python 内置数据类型,并且支持自定义类的实例,这是 JSON 等格式难以做到的。
  • 处理复杂对象结构: Pickle 能够跟踪已经被序列化的对象,因此可以正确处理递归对象(引用自身的对)和共享对象(在多处被引用的同一个对象)。
  • 版本协议: Pickle 格式随着 Python 的发展而演进,拥有多个版本的协议。较新的协议支持更多的特性和更高效的序列化。

Pickle 的常见用途:

  • 保存和加载应用程序状态: 保存程序运行时的状态,以便将来可以恢复。
  • 缓存计算结果: 对于耗时的计算,可以将结果 pickle 化并存储起来,避免重复计算。
  • 通过网络传输 Python 对象: 在分布式系统或多进程应用中传递 Python 对象。
  • 持久化机器学习模型: 保存训练好的机器学习模型是一个非常普遍的用途。

安全警告:

Pickle 模块不是安全的。 从不受信任的来源加载 pickle 数据可能导致执行任意恶意代码。 因此,您只应该解封来自您信任的数据源的数据。 对于处理不受信任的数据,JSON 等更安全的序列化格式是更好的选择。

与 JSON 的比较:

特性PickleJSON
格式二进制文本
可读性不可读人类可读
互操作性Python 特定跨语言通用
支持的数据类型几乎所有 Python 对象有限的内置数据类型

贡献者

页面历史