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

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


garabik-news-2005-05 at kassiopeia.juls.savba.sk wrote:
> sandravandale at yahoo.com 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.

regards
  Steve
-- 
Steve Holden       +44 150 684 7255  +1 800 494 3119
Holden Web LLC                     www.holdenweb.com
PyCon TX 2006                  www.python.org/pycon/




More information about the Python-list mailing list