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