Поменять местами значения переменных в Python

preview_player
Показать описание
Есть такая даже не задача, а скорее упражнение для начинающих, – обменять значения двух переменных. Это значит, надо первой переменной присвоить объект, связанный со второй. А второй, связанный с первой.

Допустим, у нас есть такая программа. Пользователь вводит значения двух переменных, потом мы выводим их на экран.
Пока обмена не происходит, какие значения переменным были присвоены, с теми они и выводятся.
Но нам надо, чтобы 'a' была связана с этим значением, а 'b' – с этим.

Если мы просто присвоим первой переменной значение второй, а второй – значение первой, то обе переменные окажутся связанными со вторым значением.
Потому что когда мы присваиваем 'b' значение 'a', 'a' уже перезаписано и содержит значение 'b'.

Нам надо где-то сохранить исходное значение 'a'. Для этого вводим третью переменную, так называемую буферную или временную. И присваиваем ей значение 'a'.
Теперь значение для переменной 'b' мы берем не из 'a', а из 'temp'. Потому что в 'a' оно уже не то, какое надо.

Способ обмена значений через буферную переменную не единственный.
Если переменные содержат числа, то можно использовать арифметический способ.
В 'a' записывается сумма значений. Если из нее вычесть значение 'b', то получится исходное значение 'a'. Его мы связываем с переменной 'b'.
Теперь если из той же суммы вычесть 'b', которое уже равно исходному 'a', то получим исходное значение 'b'. Оно связывается с переменной 'a'.

Третий способ – это использование особенностей языка Python. В Питоне есть множественное присваивание. Если до знака присваивания стоит несколько переменных, а после знака как бы несколько значений, то происходит сопоставление.
Здесь переменной 'a' будет присвоено значение 'b', а переменной 'b' – значение 'a'.

Тут могут быть любые объекты, не обязательно числа.
На самом деле это выражение достаточно сложно выполняется интерпретатором Питона. Сначала происходит упаковка данных в кортеж, потом распаковка и сопоставление переменным.

Если мы напишем просто несколько переменных через запятую, то интерпретатор нам их упакует в кортеж.
Присвоим его переменной.
Когда происходит присваивание кортежа нескольким переменным, выполняется обратное действие, то есть распаковка кортежа. И каждой переменной присваивается свое значение.

Рекомендации по теме