Давайте рассмотрим этот код, который выполняет итерацию по списку при удалении элемента на каждой итерации:
x = list(range(5))
for i in x:
print(i)
x.pop()
Он будет печатать 0, 1, 2
. Только первые три элемента печатаются, поскольку последние два элемента в списке были удалены с помощью первых двух итераций.
Но если вы попробуете что-то подобное на дикторе:
y = {i: i for i in range(5)}
for i in y:
print(i)
y.pop(i)
Он будет печатать 0
, а затем поднять RuntimeError: dictionary changed size during iteration
, потому что мы удаляем ключ из словаря, итерации по нему.
Конечно, изменение списка во время итерации плохое. Но почему RuntimeError
не RuntimeError
как в случае с словарем? Есть ли веские основания для такого поведения?