shelve
è un modulo Python che semplifica la permanenza di un dizionario Python su disco (nelle giuste condizioni).
La documentazione per shelve fornisce questo esempio per dimostrare una delle trappole dell'uso di uno scaffale:
import shelve
d = shelve.open(filename)
# ...snip...
# 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)!
La documentazione spiega:
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 (see Example).
Dire che gli scaffali si comportano in questo modo "a causa della semantica di Python" mi sembra che stia misurando Python tramite una barra alta! Sarebbe difficile per accantonare sapere se qualsiasi oggetto contenuto in una mensola ha un riferimento a qualcosa che è stato mutato (o un riferimento a qualcosa che ha un riferimento a qualcosa che è stato mutato). Questo può essere fatto in qualsiasi linguaggio di programmazione?