On 2/11/2021 3:22 PM, duncan smith wrote:

       It seems that I can mutate a deque while iterating over it if I
assign to an index, but not if I append to it. Is this the intended
behaviour?

Does the deque doc say anything about mutation while iterating? (Knowing the author of deque, I would consider everything about it intentional without *good* reason to think otherwise.

from collections import deque
d = deque(range(8))
it = iter(d)
next(it)
0
d[1] = 78

This does not change the structure of the deque, so next does not notice. It could be considered not be a mutation. It could be detected by changing deque.__setitem__, but why bother and slow down all __setitem__ calls.

next(it)
78
d.append(8)

This changes the structure, which can apparently mess-up iteration.

next(it)
Traceback (most recent call last):
   File "<pyshell#650>", line 1, in <module>
     next(it)
RuntimeError: deque mutated during iteration



--
Terry Jan Reedy

--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to