Почему выполнение «a, x = x, a» дважды приводит к изменению значений?

Во время просмотра видео, объясняющего про викторину, я нашел этот фрагмент кода:

a, x = x, a a, x = x, a print a print x 

В видео говорится, что конечным результатом является x и своп, и если мы снова это сделаем, он будет в исходном месте, которое не изменит значение каких-либо переменных.

Мой вопрос заключается в том, что если я впервые назначу a => x и x => a , тогда значение кода не будет изменено, даже если мы сделаем тот же самый код и присвоим то же значение для той же переменной, что и я как раз перед этим. Но почему видео объясняет, что значение a и x будет заменено дважды и будет получать одинаковое значение перед выполнением инструкции?

Синтаксис a,x = x,a меняет значения, потому что назначения в правой части оператора присваивания ( = ) сначала оцениваются, а затем присваиваются их значениям, как описано здесь . Логически следует, что если эта операция выполняется дважды, вторая свопа возвращает переменные к их исходным значениям.

Обратите внимание, что если вместо этого вы написали a = x; x = a a = x; x = a то a и x оба будут заканчиваться как начальное значение x потому что каждый оператор последовательно оценивается слева направо.

Демонстрация:

 >>> a = 1 >>> x = 2 >>> a,x = x,a >>> a,x (2, 1) >>> >>> a = 1 >>> x = 2 >>> a = x; x = a >>> a,x (2, 2)