首頁(yè)常見(jiàn)問(wèn)題正文

Python中什么是pickling和unpickling?

更新時(shí)間:2023-05-02 來(lái)源:黑馬程序員 瀏覽量:

IT培訓(xùn)班

  在Python中,pickling和unpickling是用于序列化和反序列化對(duì)象的過(guò)程。

  Pickling是將Python對(duì)象轉(zhuǎn)換為字節(jié)流的過(guò)程,以便可以將其保存到文件、數(shù)據(jù)庫(kù)或通過(guò)網(wǎng)絡(luò)傳輸。通過(guò)pickling,可以將復(fù)雜的對(duì)象轉(zhuǎn)換為一系列字節(jié),然后可以將這些字節(jié)重新轉(zhuǎn)換回對(duì)象。這對(duì)于在不同的Python解釋器之間傳遞對(duì)象或?qū)?duì)象永久保存在存儲(chǔ)介質(zhì)上都非常有用。

  Unpickling是pickling的反向過(guò)程,即從字節(jié)流中恢復(fù)原始對(duì)象的過(guò)程。通過(guò)unpickling,可以將之前pickled的對(duì)象重新還原為原始的Python對(duì)象。

  下面是一個(gè)簡(jiǎn)單的代碼演示:

import pickle

# 定義一個(gè)對(duì)象
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:將對(duì)象轉(zhuǎn)換為字節(jié)流
person = Person("Alice", 25)
pickled_person = pickle.dumps(person)

# 打印pickled_person,即字節(jié)流表示的對(duì)象
print(pickled_person)

# Unpickling:將字節(jié)流轉(zhuǎn)換為對(duì)象
unpickled_person = pickle.loads(pickled_person)

# 打印unpickled_person,即恢復(fù)的對(duì)象
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)

  在上面的示例中,我們首先定義了一個(gè)Person類,該類具有name和age屬性。然后,我們創(chuàng)建一個(gè)Person對(duì)象,并使用pickle.dumps()函數(shù)將其轉(zhuǎn)換為字節(jié)流。接下來(lái),我們使用pickle.loads()函數(shù)將字節(jié)流轉(zhuǎn)換回原始對(duì)象。

  注意:在實(shí)際使用pickling和unpickling時(shí),可能需要將字節(jié)流寫入文件或從文件中讀取字節(jié)流。這只是一個(gè)簡(jiǎn)單的示例,用于演示pickling和unpickling的基本概念。

分享到:
在線咨詢 我要報(bào)名
和我們?cè)诰€交談!