так как это создаст список из ключей словаря, который не изменится во время итерации
те рассмотрим этот код, который перебираетсписок при удалении элемента каждую итерацию:
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
не поднял как в случае со словарем? Есть ли веская причина для такого поведения?