封存緩存
❶ pickle -- 封存與解封│Python標准庫
零. 前言
pickle 模塊實現了對 Python 對象結構的二進制序列化和反序列化,與 json 模塊類似。
在pickle 模塊中,將 Python 對象序列化轉換成二進制格式的過程稱為封存,將封存的二進制數據轉換回灶斗 Python 對象的過程稱為解封。
壹. 封存
與 json 模塊不同,pickle 模塊幾乎可以封存任意結構的 Python 對象。使用 pickle.mps() 函數進行封存操肢返作會返回 bytes 類型的結果。
示例中定義了一個名為 test() 的自定義函數,並將其進行封存。pickle.mps() 函數執行後輸出了二進制數據。
以下類型可以被封存:內置常量(None, True, False, Ellipsis 和 NotImplemented)、整數、浮點數、復數、字元串、位元組串、位元組數組、只包含可封存對象的元組、列表、集隱飢磨合和字典、內置函數、使用關鍵字 def 定義的自定義函數(使用關鍵字 lambda 定義的匿名函數不可以)。
若要將封存的二進制數據保存到文件中,不需要使用 f.write() 函數。使用 pickle.mp() 函數即可完成封存和保存到文件的操作。
在使用 pickle.mp() 函數時,由於要保存的數據是二進制格式,使用 open() 函數時一定要使用 b 模式創建文件對象。
貳. 解封
可以使用 pickle.loads() 函數解封二進制數據,也可以使用 pickle.load() 函數解封保存有二進制數據的文件。
以下示例中,兩種解封方式是等效的:
叄. 總結
pickle 模塊功能強大,可以序列化和反序列化任意的 Python 對象,適用於緩存、數據持久化保存、數據傳輸等應用場景。
需要注意的是,在有服務之間的交互場景中,如果載入了不受信任的數據,會存在安全風險。惡意數據可能會執行任意代碼,導致安全漏洞。因此,永遠不要從不受信任或不安全的來源載入 pickle 數據。
此外,不同版本的 Python 之間,pickle 數據可能不兼容。升級 Python 版本後,使用舊版本 pickle 數據可能會失敗。為了確保兼容性,建議使用特定版本的 Python 和 pickle 模塊來保存和載入數據。