← Назад к вопросам

Как можно поменять два значения в переменной?

1.2 Junior🔥 161 комментариев
#Python Core

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Обмен значениями между переменными в Python

Обмен (swap) значений между двумя переменными — это базовая операция программирования. Python предоставляет несколько способов, каждый с собственными преимуществами.

1. Распаковка кортежа (Pythonic способ)

Это самый элегантный и рекомендуемый способ в Python:

a = 5
b = 10

# Самый простой способ
a, b = b, a

print(a, b)  # 10 5

Этот способ работает благодаря тому, что Python сначала создает кортеж на правой стороне, а потом распаковывает его в переменные слева.

2. Использование временной переменной

Классический способ, работающий во всех языках программирования:

a = 5
b = 10
temp = a
a = b
b = temp

print(a, b)  # 10 5

Этот способ менее элегантен, но явно показывает логику.

3. Арифметический способ

Обмен возможен через сложение и вычитание:

a = 5
b = 10

a = a + b      # a = 15
b = a - b      # b = 5
a = a - b      # a = 10

print(a, b)  # 10 5

Этот способ не рекомендуется, так как может привести к переполнению при работе с большими числами.

4. Побитовый XOR (XOR swap)

Для целых чисел можно использовать побитовую операцию XOR:

a = 5
b = 10

a = a ^ b
b = a ^ b
a = a ^ b

print(a, b)  # 10 5

Это работает потому что x ^ x = 0 и x ^ 0 = x. Способ нечитаемый и медленнее, чем распаковка.

5. Обмен в списке

Меняем элементы списка:

lst = [1, 2, 3, 4, 5]
i, j = 0, 4

# Распаковка
lst[i], lst[j] = lst[j], lst[i]
print(lst)  # [5, 2, 3, 4, 1]

# Или используя переменную
temp = lst[i]
lst[i] = lst[j]
lst[j] = temp

6. Обмен в словаре

data = {"x": 10, "y": 20}

# Распаковка
data["x"], data["y"] = data["y"], data["x"]
print(data)  # {"x": 20, "y": 10}

7. Обмен нескольких переменных

Python позволяет менять несколько значений одновременно:

a = 1
b = 2
c = 3

# Циклический сдвиг
a, b, c = b, c, a
print(a, b, c)  # 2 3 1

8. Обмен в функции

def swap(a, b):
    return b, a

x = 5
y = 10
x, y = swap(x, y)
print(x, y)  # 10 5

9. Обмен с использованием функции

Если нужна функция для модификации:

def swap_in_list(lst, i, j):
    lst[i], lst[j] = lst[j], lst[i]

data = [1, 2, 3, 4, 5]
swap_in_list(data, 0, 4)
print(data)  # [5, 2, 3, 4, 1]

10. Обмен в разных типах данных

# Строки
str_a = "Hello"
str_b = "World"
str_a, str_b = str_b, str_a
print(str_a, str_b)  # World Hello

# Кортежи
t_a = (1, 2)
t_b = (3, 4)
t_a, t_b = t_b, t_a
print(t_a, t_b)  # (3, 4) (1, 2)

11. Обмен со сложными условиями

a, b = 5, 10
if a > b:
    a, b = b, a

print(a, b)  # 5 10 (уже отсортированы)

Практический пример: сортировка пузырьком

def bubble_sort(arr):
    n = len(arr)
    for i in range(n):
        for j in range(0, n - i - 1):
            if arr[j] > arr[j + 1]:
                arr[j], arr[j + 1] = arr[j + 1], arr[j]
    return arr

data = [64, 34, 25, 12, 22, 11, 90]
print(bubble_sort(data))  # [11, 12, 22, 25, 34, 64, 90]

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

✅ Используй распаковку — это самый питонический способ ✅ Четкая читаемость — a, b = b, a сразу понятна любому ✅ Производительность — распаковка работает быстрее ✅ Универсальность — работает для любых типов данных ✅ Избегай XOR — только если специально требуется побитовая логика

В Python распаковка кортежа — это стандарт для обмена значений.

Как можно поменять два значения в переменной? | PrepBro