[Python-Dev] Issue 19332: Guard against changing dict during iteration

Nick Coghlan ncoghlan at gmail.com
Thu Nov 7 13:29:36 CET 2013


On 7 Nov 2013 03:18, "Antoine Pitrou" <solipsis at pitrou.net> wrote:
>
> Le 06/11/2013 06:41, Nick Coghlan a écrit :
>
>>
>> The behaviour of mutating builtin containers while iterating over them
>> is formally undefined beyond "it won't segfault" (one of the few such
>> undefined behaviours in Python). The associated exceptions are thus
>> strictly "best effort given other constraints".
>
>
> Not sure what you mean with "formally undefined". For example, you can
perfectly well change a list's contents while iterating over it, and I bet
there's a lot of code that relies on that, as in::
>
> for i, value in enumerate(mylist):
>     if some_condition(value):
>         mylist[i] = some_function(value)
>
> If you change "builtin containers" to "builtin unordered containers",
then you probably are closer to the truth :)

I meant changing the length rather than just the contents of an existing
entry. Even lists get a little odd if you add and remove entries while
iterating (although I agree the sequence case is much better defined than
the unordered container case).

Cheers,
Nick.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-dev/attachments/20131107/85ef2016/attachment.html>


More information about the Python-Dev mailing list