Python cho phép hoán đổi (swap) hai biến trong một câu lệnh nhờ tuple packing/unpacking.
Cú pháp chuẩn
a, b = b, a
Ví dụ
a = 20
b = 30
print(f"Before: a={a}, b={b}") # Before: a=20, b=30
a, b = b, a
print(f"After: a={a}, b={b}") # After: a=30, b=20
Cơ chế hoạt động (Tuple Packing/Unpacking)
- Right-hand side (RHS) evaluated first:
b, atạo tuple(30, 20)trong bộ nhớ. - Tuple được unpack gán vào left-hand side (LHS) theo thứ tự:
anhận phần tử 0,bnhận phần tử 1. - Xảy ra cùng lúc (atomic), không cần biến tạm.
Mở rộng: Hoán đổi nhiều biến
a, b, c = 1, 2, 3 a, b, c = c, a, b # Rotate right print(a, b, c) # 3 1 2 # Hoán đổi 4 biến a, b, c, d = 1, 2, 3, 4 a, b, c, d = d, c, b, a # Reverse print(a, b, c, d) # 4 3 2 1
So sánh với ngôn ngữ khác
| Ngôn ngữ | Cách swap |
|---|---|
| Python | a, b = b, a |
| C/C++ | int tmp=a; a=b; b=tmp; hoặc std::swap(a,b) |
| Java | int tmp=a; a=b; b=tmp; |
| JavaScript | [a, b] = [b, a] (ES6 destructuring) |
| Go | a, b = b, a |
Lưu ý
- RHS luôn được đánh giá trước LHS (theo spec Python).
- Không dùng được cho
a[i], a[j] = a[j], a[i]nếui == j(vẫn an toàn, nhưng vô nghĩa). - Với object phức tạp: swap reference, không copy object.