我想說明情況的最好辦法是用一個例子:Python的情況下將其關閉後更改
>>> class Person:
... def __init__(self, brother=None):
... self.brother = brother
...
>>> bob = Person()
>>> alice = Person(brother=bob)
>>> import shelve
>>> db = shelve.open('main.db', writeback=True)
>>> db['bob'] = bob
>>> db['alice'] = alice
>>> db['bob'] is db['alice'].brother
True
>>> db['bob'] == db['alice'].brother
True
>>> db.close()
>>> db = shelve.open('main.db',writeback=True)
>>> db['bob'] is db['alice'].brother
False
>>> db['bob'] == db['alice'].brother
False
預期的輸出對於兩個比較是True
一次。但是,pickle
(由shelve
使用)似乎分別重新實例化bob
和alice.brother
。我怎樣才能「修復」這個使用shelve
/pickle
? db['alice'].brother
可能指向db['bob']
或類似的東西嗎?注意我不想只比較兩者,我需要兩者實際上相同。
正如Blckknght建議的那樣,我試着一次酸洗整個詞典,但問題依然存在,因爲它似乎分別醃製每個鍵。
什麼是'Person'? – user2357112
@ user2357112只是一個示例類,不應該有所作爲...請參閱http://pastebin.com/hCxSU54n – Alex