Surprise: del weakref.WeakKeyDictionary[ item ] raises RuntimeError
Terry Reedy
tjreedy at udel.edu
Fri Apr 11 13:23:34 EDT 2003
"Mike C. Fletcher" <mcfletch at rogers.com> wrote in message
news:mailman.1050074899.23901.python-list at python.org...
> Greg Ewing (using news.cis.dfn.de) wrote:
>
> > Mike C. Fletcher wrote:
> >
> >> for ref in self.data.iterkeys():
> >> o = ref()
> >> if o == key:
> >> del self.data[ref]
> >> return
> >>
> >> Using keys seems to avoid the problem, but with the obvious
> >> disadvantages of keys vs. iterkeys.
> >
> >
> > Maybe a separate list of keys could be maintained
> > alongside the dict?
>
>
> It would have a pretty significant performance penalty if you always
> maintained a list. Although I guess that doing two dictionaries:
>
> ref : object
> id : ref
>
> And then doing all the logic to make sure they keep in synch would
give
> you acceptable performance (and much faster than the current version
for
> del (at the expense of lots of memory used and slower performance
> elsewhere)).
>
> An "atomic" threading mechanism applied to the iterator-based del
method
> might work just as well, I suppose.
>
> In the meantime, using keys() *is* actually "maintaining" the
seperate
> key-list for as long as it's needed.
>
> Oh well, has to be some downside to iterators or we wouldn't have
any
> fun :) ,
> Mike
>
> _______________________________________
> Mike C. Fletcher
> Designer, VR Plumber, Coder
> http://members.rogers.com/mcfletch/
>
>
>
>
More information about the Python-list
mailing list