更新時間:2023-05-02 來源:黑馬程序員 瀏覽量:
在Python中,pickling和unpickling是用于序列化和反序列化對象的過程。
Pickling是將Python對象轉(zhuǎn)換為字節(jié)流的過程,以便可以將其保存到文件、數(shù)據(jù)庫或通過網(wǎng)絡(luò)傳輸。通過pickling,可以將復(fù)雜的對象轉(zhuǎn)換為一系列字節(jié),然后可以將這些字節(jié)重新轉(zhuǎn)換回對象。這對于在不同的Python解釋器之間傳遞對象或?qū)ο笥谰帽4嬖诖鎯橘|(zhì)上都非常有用。
Unpickling是pickling的反向過程,即從字節(jié)流中恢復(fù)原始對象的過程。通過unpickling,可以將之前pickled的對象重新還原為原始的Python對象。
下面是一個簡單的代碼演示:
import pickle # 定義一個對象 class Person: def __init__(self, name, age): self.name = name self.age = age def __str__(self): return f"Person(name={self.name}, age={self.age})" # Pickling:將對象轉(zhuǎn)換為字節(jié)流 person = Person("Alice", 25) pickled_person = pickle.dumps(person) # 打印pickled_person,即字節(jié)流表示的對象 print(pickled_person) # Unpickling:將字節(jié)流轉(zhuǎn)換為對象 unpickled_person = pickle.loads(pickled_person) # 打印unpickled_person,即恢復(fù)的對象 print(unpickled_person)
輸出:
b'\x80\x04\x95\x1b\x00\x00\x00\x00\x00\x00\x00\x8c\x08__main__\x94\x8c\x06Person\x94\x93\x94)\x81\x94}\x94(\x8c\x04name\x94\x8c\x05Alice\x94\x8c\x03age\x94K\x19ub.' Person(name=Alice, age=25)
在上面的示例中,我們首先定義了一個Person類,該類具有name和age屬性。然后,我們創(chuàng)建一個Person對象,并使用pickle.dumps()函數(shù)將其轉(zhuǎn)換為字節(jié)流。接下來,我們使用pickle.loads()函數(shù)將字節(jié)流轉(zhuǎn)換回原始對象。
注意:在實(shí)際使用pickling和unpickling時,可能需要將字節(jié)流寫入文件或從文件中讀取字節(jié)流。這只是一個簡單的示例,用于演示pickling和unpickling的基本概念。