Python搁置更改字典元素的值

Python搁置更改字典元素的值,python,dictionary,shelve,Python,Dictionary,Shelve,这一次我被难住了,所以我想我会挑战其他人。 我试图改变书架上字典的一个元素,但它太顽固了 下面是一个演示: db = shelve.open('/tmp/somefile','c') db['bob'] = {'shoesize':42, 'gender':'m'} db['bob'] {'shoesize': 42, 'gender': 'm'} db['bob']['gender'] = 'u' db['bob'] {'shoesize': 42, 'gender': 'm'} db['bo

这一次我被难住了,所以我想我会挑战其他人。 我试图改变书架上字典的一个元素,但它太顽固了

下面是一个演示:

db = shelve.open('/tmp/somefile','c')
db['bob'] = {'shoesize':42, 'gender':'m'}
db['bob']
{'shoesize': 42, 'gender': 'm'}
db['bob']['gender'] = 'u'
db['bob']
{'shoesize': 42, 'gender': 'm'}
db['bob'] = {'shoesize': 42, 'gender': 'u'}
db['bob']
{'shoesize': 42, 'gender': 'u'}
这是在RHEL7主机上的Python3.6.1上发生的。 从早期的RHEL和Python2升级后,我了解到底层库更多地与工具架的功能有关,但这有点奇怪

Python for shelf中的“bob”同位语

由于Python语义的原因,工具架无法知道何时修改可变的持久字典条目。默认情况下,仅当指定给工具架时,才会写入修改的对象

您的第一次尝试db['bob']['gender']='u'不起作用,因为它不是对工具架本身的赋值,而是对dict db['bob']['gender']的赋值。您的第二次尝试确实有效,因为它是对工具架本身的键的赋值。文件中的内容将进一步说明这一点

如果以writeback=True打开,则可以正常编写代码。然而,正如文档所指出的,它也会消耗更多内存,并使d.close操作变慢。

什么是db?。。