Я знаю, что в общем случае небезопасно изменять кодировку при ее повторении:
d = {1: 2, 3: 4}
for k in d.keys():
d[k + 1] = d[k] + 1
Это дает RuntimeError
, как и ожидалось. Однако, читая документацию для dict
, я обнаружил следующее (выделение мое):
Итерация представлений при добавлении или удалении записей в словаре может вызвать RuntimeError
или не сможет выполнить итерацию по всем записям.
Итак, я попробовал следующий код:
d = {1: 2, 3: 4}
for k in d.keys():
d[k] = d[k] + 1
Примечание: я не добавлял и не удалял записи во время итерации; Я только обновил существующие записи. Я попробовал это с несколькими примерами и до сих пор не получил RuntimeError
, и цикл работает, как ожидалось.
Гарантируется ли это на языке? Или мне просто повезло?
Примечание: я использую Python 3, поэтому d.keys()
возвращает динамическое представление, а не list
).