How can I make a dictionary that marks itself when it's modified?

Steve Holden steve at
Thu Jan 12 19:28:54 CET 2006

garabik-news-2005-05 at wrote:
> sandravandale at wrote:
>>It's important that I can read the contents of the dict without
>>flagging it as modified, but I want it to set the flag the moment I add
>>a new element or alter an existing one (the values in the dict are
>>mutable), this is what makes it difficult. Because the values are
>>mutable I don't think you can tell the difference between a read and a
>>write without making some sort of wrapper around them.
>>Still, I'd love to hear how you guys would do it.
> if the dictionary is small and speed not important, you can wrap it 
> in a class catching __getitem__ and __setitem__ and testing
> if repr(self) changes.
d = {1: [a, b],
      2: [b, c]}

d[1][0] = 3

How would this work? __getitem__() will be called once, to get a 
reference to the list, and so there's no opportunity to compare the 
'before' and 'after' repr() values.

Steve Holden       +44 150 684 7255  +1 800 494 3119
Holden Web LLC           
PyCon TX 2006        

More information about the Python-list mailing list