擅长:python、mysql、java
<p><code>shelve</code>模块不会注意到您何时对一个对象进行了变异,只有在您分配它时才会注意到:</p>
<blockquote>
<p>Because of Python semantics, a shelf cannot know when a mutable persistent-dictionary entry is modified. By default modified objects are written only when assigned to the shelf.</p>
</blockquote>
<p>所以它没有意识到<code>sub.exercises[0].modify(18)</code>是一个需要重写回磁盘的操作。在</p>
<p>打开数据库时尝试将<code>writeback</code>标志设置为True。然后它将在关闭时重新保存数据库,即使它没有显式地检测到任何更改。在</p>
<pre><code>with shelve.open('shelve_classes', writeback=True) as db:
key = 'Comma splices & Fused sentences'
sub = db[key]
sub.exercises[0].modify(18)
db[key] = sub
</code></pre>