状況を説明する最良の方法は、例を使用することだと思います。
>>> 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が提案したように、辞書全体を一度に酸洗いしようとしましたが、各キーを別々に酸洗いしているように見えるため、問題は解決しません。