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 可獲得更高效的存儲性能。
“點贊有美意,讚賞是鼓勵”