Семантика одновременного присваивания в Python
Рассмотрим следующий код Python 3:
a = [-1,-1,-1]
i = 0
А теперь рассмотрим следующие две версии одновременного присваивания как a, так и i:
Версия задания 1:
a[i],i = i,i+1
Версия задания 2:
i,a[i] = i+1,i
Я ожидаю, что эти две версии одновременных назначений будут семантически эквивалентными. Однако, если вы проверяете значения a и i после каждого из одновременных назначений, вы получаете разные состояния:
Выход дляprint(a,i)
после назначения версии 1:
[0, -1, -1] 1
Выход дляprint(a,i)
после назначения версии 2:
[-1, 0, -1] 1
Я не эксперт по семантике Python, но такое поведение кажется странным. Я ожидаю, что оба назначения будут вести себя как версия назначения 1. Более того, если вы проверите следующую ссылку, можно ожидать, что обе версии назначения приведут к одному и тому же состоянию:
Ссылка на отрывок книги в Google Книгах
Что-то мне не хватает в семантике Python для одновременных назначений?
ЗаписьЭто странное поведение не воспроизводимо, например, когда переменнаяa
имеет целочисленный тип; кажется требуетa
быть списком типов (может быть, это случай любого изменяемого типа?).