我认为解释这种情况的最好方法是举个例子:
>>> 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所建议的,我尝试一次腌制整个字典,但问题仍然存在,因为它似乎分别腌制每个键。