ใน Python การ Swap ตัวแปรสองตัวทำได้ง่ายมากในบรรทัดเดียว ไม่ต้องใช้ Temporary Variable
วิธีมาตรฐาน (Pythonic Way)
>>> a = 20 >>> b = 30 >>> a, b = b, a >>> a 30 >>> b 20
การทำงานเบื้องหลัง (Mechanism)
- Evaluate Right-hand Side ก่อน:
b, aถูกประเมิน สร้าง Tuple(30, 20)ใน Memory - Tuple Packing: ค่าของ
bและa(ก่อน Swap) ถูก Pack เป็น Tuple - Evaluate Left-hand Side:
a, bเป็น Targets สำหรับ Unpacking - Tuple Unpacking: Tuple ถูก Unpack เรียงลำดับ Element แรก →
a, Element ที่สอง →b
เกิดขึ้นแบบ Atomic (พร้อมกัน) ไม่มี Intermediate State ที่ a และ b มีค่าเดิมคู่กัน
ขยายไป Swap หลายตัวแปร
# Rotate 3 Variables a, b, c = 1, 2, 3 a, b, c = b, c, a print(a, b, c) # 2 3 1 # Swap ใน List lst = [1, 2, 3, 4] lst[0], lst[3] = lst[3], lst[0] print(lst) # [4, 2, 3, 1]
เปรียบเทียบกับภาษาอื่น
| Language | Swap Syntax |
|---|---|
| Python | a, b = b, a |
| C/C++/Java | temp = a; a = b; b = temp; |
| JavaScript (ES6) | [a, b] = [b, a] |
| Go | a, b = b, a |
| Ruby | a, b = b, a |
Use Cases ทั่วไป
# 1. Swap Values
x, y = y, x
# 2. Return Multiple Values แล้ว Unpack
def min_max(lst):
return min(lst), max(lst)
minimum, maximum = min_max([3, 1, 4, 1, 5])
# 3. Simultaneous Update (Fibonacci)
a, b = 0, 1
for _ in range(10):
a, b = b, a + b # Fibonacci Sequence
# 4. Reverse ใน List (Two-pointer)
left, right = 0, len(lst) - 1
while left < right:
lst[left], lst[right] = lst[right], lst[left]
left += 1
right -= 1
ข้อควรระวัง
- Right-hand Side ประเมินครบก่อน Left-hand Side ใดๆ
- จำนวน Variables ทั้งสองข้างต้องเท่ากัน (ValueError หากไม่เท่ากัน)
- ทำงานกับ Iterable ใดๆ ที่ Unpack ได้ (Tuple, List, Generator)