Python 庫手冊:pickle 對象序列化模塊

pickle 是 Python 標準庫中用於對象序列化與反序列化的模塊。它可以將 Python 中的任意對象轉換爲字節流(序列化),以便保存到文件或通過網絡傳輸。也可將字節流恢復爲原始對象(反序列化)。

常見應用場景:

(1)將模型、數據結構、配置對象保存到本地文件中。

(2)在分佈式任務中傳輸對象。

(3)緩存複雜計算結果。

(4)存儲 Python 原生數據類型(列表、字典、自定義類等)。

◆ ◆ ◆

核心概念

1、序列化(Pickling)

將 Python 對象轉爲可存儲或傳輸的二進制格式。

2、反序列化(Unpickling)

將二進制數據恢復爲原始對象。

3、pickle 模塊只適用於 Python 內部使用,不能跨語言或長期存儲(因協議版本可能變化)。

4、對象必須是“可 picklable”的,函數、打開的文件句柄、線程等不可直接序列化。

◆ ◆ ◆

應用舉例

例 1: 將對象保存到文件

例 2:從文件中加載對象

例 3:序列化爲字節流(不寫入文件)

例 4:自定義類對象的序列化

例 5:指定協議版本保存對象

◆ ◆ ◆

常用函數速覽

pickle.dump(obj, file, protocol=None)

將對象序列化並寫入二進制文件。

參數:

obj:要序列化的 Python 對象

file:類文件對象(以 'wb' 打開)

protocol:序列化協議版本(默認自動選擇)

返回:無

pickle.load(file)

從二進制文件中讀取並反序列化對象。

參數:

file:類文件對象(以 'rb' 打開)

返回:Python 對象

pickle.dumps(obj, protocol=None)

將對象序列化爲字節串(不寫入文件)。

參數:

obj:要序列化的對象

protocol:可選協議版本

返回:bytes 類型

pickle.loads(bytes_obj)

將字節串反序列化爲 Python 對象。

參數:

bytes_obj:字節數據(由 dumps() 得到)

返回:Python 對象

pickle.HIGHEST_PROTOCOL

返回當前 Python 版本支持的最高協議號(整數),建議用於最大兼容性與性能。

◆ ◆ ◆

補充說明

1、安全性警告:pickle.load() 執行過程中可能執行任意代碼,不要反序列化不可信的數據來源。

2、推薦僅用於 Python 內部程序之間的數據持久化,不建議作爲通用數據交換格式。

3、若需跨語言兼容性,建議使用 或 protobuf 等格式。

4、有些對象(如文件、數據庫連接、線程、生成器等)不能被 pickle 序列化。

5、使用 protocol=pickle.HIGHEST_PROTOCOL 可獲得更高效的存儲性能。

“點贊有美意,讚賞是鼓勵”