【发布时间】:2018-11-05 23:57:18
【问题描述】:
我在使用搁置时看到了这种行为:
import shelve
my_shelve = shelve.open('/tmp/shelve', writeback=True)
my_shelve['a'] = {'foo': 'bar'}
my_shelve['b'] = my_shelve['a']
id(my_shelve['a']) # 140421814419392
id(my_shelve['b']) # 140421814419392
my_shelve['a']['foo'] = 'Hello'
my_shelve['a']['foo'] # 'Hello'
my_shelve['b']['foo'] # 'Hello'
my_shelve.close()
my_shelve = shelve.open('/tmp/shelve', writeback=True)
id(my_shelve['a']) # 140421774309128
id(my_shelve['b']) # 140421774307832 -> This is weird.
my_shelve['a']['foo'] # 'Hello'
my_shelve['b']['foo'] # 'Hello'
my_shelve['a']['foo'] = 'foo'
my_shelve['a']['foo'] # 'foo'
my_shelve['b']['foo'] # 'Hello'
my_shelve.close()
正如您在重新打开搁架时看到的那样,以前是同一个对象的两个对象现在是两个不同的对象。
- 有人知道这里发生了什么吗?
- 有人知道如何避免这种行为吗?
我正在使用 Python 3.7.0
【问题讨论】:
-
为什么需要避免这种行为?
-
@EdgarR.Mondragón 当我试图腌制一棵树搁置时,我的问题出现了。这棵树有一堆指向树中其他节点的节点。
标签: python pickle python-internals python-3.7 shelve