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

Ответы на вопрос(1)

Ваш ответ на вопрос