在以下的文章之中我們來了解什麼是python中的序列化。了解一下python序列化的相關知識,以及python序列化在python程式設計之中能起到什麼樣的作用。
在程式運行的過程中,所有的變數都是在記憶體中,例如,定義一個dict:
d = dict(name='Bob', age=20, score=88)
可以隨時修改變量,例如把name改成'Bill',但是一旦程式結束,變數所佔用的記憶體就會被作業系統全部回收。如果沒有把修改過的'Bill'儲存到磁碟上,下次重新執行程序,變數又被初始化為'Bob'。
我們把變數從記憶體變成可儲存或傳輸的過程稱之為序列化,在Python中叫pickling,在其他語言中也被稱之為serialization,marshalling,flattening等等,都是一個意思。
序列化之後,就可以把序列化後的內容寫入磁碟,或是透過網路傳輸到別的機器上。
反過來,把變數內容從序列化的物件重新讀到記憶體裡稱之為反序列化,即unpickling。
Python提供了pickle模組來實現序列化。
首先,我們試著把一個物件序列化並寫入檔案:
>>> import pickle >>> d = dict(name='Bob', age=20, score=88) >>> pickle.dumps(d) b'\x80\x03}q\x00(X\x03\x00\x00\x00ageq\x01K\x14X\x05\x00\x00\x00scoreq\x02KXX\x04\x00\x00\x00nameq\x03X\x03\x00\x00\x00Bobq\x04u.'
pickle.dumps()方法把任意物件序列化成一個bytes,然後,就可以把這個bytes寫入文件。或用另一個方法pickle.dump()直接把物件序列化後寫入一個file-like Object:
>>> f = open('dump.txt', 'wb') >>> pickle.dump(d, f) >>> f.close()
看看寫入的dump.txt文件,一堆亂七八糟的內容,這些都是Python保存的物件內部資訊。
當我們要把物件從磁碟讀到記憶體時,可以先把內容讀到一個bytes,然後用pickle.loads()方法反序列化出對象,也可以直接用pickle.load()方法從一個file-like Object中直接反序列化出物件。我們打開另一個Python命令列來反序列化剛才保存的物件:
>>> f = open('dump.txt', 'rb') >>> d = pickle.load(f) >>> f.close() >>> d {'age': 20, 'score': 88, 'name': 'Bob'}
變數的內容又回來了!
當然,這個變數和原來的變數是完全不相干的對象,它們只是內容相同而已。
Pickle的問題和所有其他程式語言特有的序列化問題一樣,就是它只能用於Python,並且可能不同版本的Python彼此都不相容,因此,只能用Pickle保存那些不重要的數據,不能成功地反序列化也沒關係。
以上就是本篇文章所講述的所有內容,這篇文章主要介紹了python序列化的相關知識,希望你能藉助資料從而理解上述所說的內容。希望我在這片文章所講述的內容能夠對你有幫助,讓你學習python更加輕鬆。
更多相關知識,請造訪php中文網Python教學欄位。
以上是什麼是python中的序列化? (實例解析)的詳細內容。更多資訊請關注PHP中文網其他相關文章!