在程序運行的過程中,所有的變量都是在內存中,比如,定義一個dict:
d = dict(name='Bob', age=20, score=88)
可以隨時修改變量,比如把name
改成'Bill'
,但是一旦程序結束,變量所占用的內存就被操作系統全部回收。如果沒有把修改后的'Bill'
存儲到磁盤上,下次重新運行程序,變量又被初始化為'Bob'
。
我們把變量從內存中變成可存儲或傳輸的過程稱之為序列化,在Python中叫pickling
,在其他語言中也被稱之為serialization,marshalling,flattening
等等,都是一個意思。
序列化之后,就可以把序列化后的內容寫入磁盤,或者通過網絡傳輸到別的機器上。
反過來,把變量內容從序列化的對象重新讀到內存里稱之為反序列化,即unpickling
。
Python提供兩個模塊來實現序列化:cPickle和pickle
。
import pickle
f = open("F:/mologa-workspace/goods.txt","wb")
d = dict(name='mologa',password='mologa123',assets=88)
print(d)
pickle.dump(d,f)
f.close()
pickle.dump()
直接把對象序列化后寫入一個file-like Object
:
當我們要把對象從磁盤讀到內存時,可以先把內容讀到一個str
,然后用pickle.loads()
方法反序列化出對象,也可以直接用pickle.load()
方法從一個file-like Object
中直接反序列化出對象。
我們打開另一個Python命令行來反序列化剛才保存的對象:
import pickle
f = open("F:/mologa-workspace/goods.txt","rb")
d = pickle.load(f)
f.close()
print(d)
結果輸出:
F:\Python35\python.exe F:/mologa-workspace/7th.py
{'assets': 88, 'name': 'mologa', 'password': 'mologa123'}
Process finished with exit code 0