Jednoczesna semantyka przydziału w Pythonie

Rozważ następujący kod Pythona 3:

a = [-1,-1,-1]
i = 0

A teraz rozważ następujące dwie wersje jednoczesnego przypisania zarówno a jak i:

Wersja przydziału 1:

a[i],i = i,i+1

Przypisanie wersja 2:

i,a[i] = i+1,i

Spodziewałbym się, że te dwie wersje jednoczesnych zadań będą semantycznie równoważne. Jeśli jednak sprawdzisz wartości ai po każdym z jednoczesnych przypisań, otrzymasz różne stany:

Wyjście dlaprint(a,i) po przypisaniu wersja 1:

[0, -1, -1] 1

Wyjście dlaprint(a,i) po przypisaniu wersja 2:

[-1, 0, -1] 1

Nie jestem ekspertem od semantyki Pythona, ale to zachowanie wydaje się dziwne. Spodziewałbym się, że oba zadania zachowają się jak wersja 1. Ponadto, jeśli sprawdzisz poniższy link, można by oczekiwać, że obie wersje przydziału doprowadzą do tego samego stanu:

Link do fragmentu książki w Książkach Google

Czy jest coś, czego brakuje mi w odniesieniu do semantyki Pythona do jednoczesnych zadań?

Uwaga: To dziwne zachowanie nie wydaje się być powtarzalne, na przykład, gdy zmiennaa ma typ całkowity; wydaje się wymagaća być z listy typów (może tak jest w przypadku dowolnego typu zmiennego?).

questionAnswers(1)

yourAnswerToTheQuestion