我在 Python 中使用 Shelve 时遇到问题:
In [391]: x
Out[391]: {'broken': {'position': 25, 'page': 1, 'letter': 'a'}}
In [392]: x['broken'].update({'page':1,'position':25,'letter':'b'})
In [393]: x
Out[393]: {'broken': {'position': 25, 'page': 1, 'letter': 'a'}}
不明白为什么不更新?有什么想法吗?
请您参考如下方法:
这包含在 documentation 中.基本上,关键字参数 writeback 到 shelve.open 负责:
If the optional
writebackparameter is set toTrue, all entries accessed are also cached in memory, and written back onsync()andclose(); this can make it handier to mutate mutable entries in the persistent dictionary, but, if many entries are accessed, it can consume vast amounts of memory for the cache, and it can make the close operation very slow since all accessed entries are written back (there is no way to determine which accessed entries are mutable, nor which ones were actually mutated).
来自同一页面的示例:
d = shelve.open(filename) # open -- file may get suffix added by low-level
# library
# as d was opened WITHOUT writeback=True, beware:
d['xx'] = range(4) # this works as expected, but...
d['xx'].append(5) # *this doesn't!* -- d['xx'] is STILL range(4)!
# having opened d without writeback=True, you need to code carefully:
temp = d['xx'] # extracts the copy
temp.append(5) # mutates the copy
d['xx'] = temp # stores the copy right back, to persist it
# or, d=shelve.open(filename,writeback=True) would let you just code
# d['xx'].append(5) and have it work as expected, BUT it would also
# consume more memory and make the d.close() operation slower.
d.close() # close it
