Am 17.08.2012 03:01, schrieb Paul Rubin:
Ian Kelly <ian.g.ke...@gmail.com> writes:
With regard to key insertion and deletion while iterating over a dict
or set, though, there is just no good reason to be doing that
(especially as the result is very implementation-specific), and I
wouldn't mind a more complete low-level check against it as long as
it's not too expensive (which is not clearly the case with the current
suggestion at all).
One possible approach is to freeze the dictionary against modification
while any iterator is open on it. You could keep a count of active
iterators in the dict structure, adjusting it whenever an iterator is
created or closed/destroyed.
What if there is an iterator left over from a loop that was terminated
early? That could block access to the sequence even though nothing is
/really/ iterating over it.
I personally prefer a reliable error, at least when __debug__ is set.
Someone suggested a timestamp or a list of active iterators, which both
sound reasonable. The two should be O(1) and O(#iterators) in complexity
on all mutating operations and O(1) on iteration, so they should be
acceptable. With a C implementation it probably boils down to very few
cycles (checking a pointer/incrementing an integer). I can't say if this
is feasible without compromising performance though, at the very least
it requires an additional member in all dicts and iterators.
Uli
--
http://mail.python.org/mailman/listinfo/python-list