從生活例子理解程式邏輯
問題起源
假設你想交換兩個杯子的飲料(可樂 ↔ 橙汁)。如果直接把杯 A 倒入杯 B,再把杯 B 倒回杯 A,你會得到一杯混合飲料——程式裡的 a = b; b = a 有完全一樣的問題。
❌ 錯誤方式(值被覆蓋)
a = 1 b = 2 a = b # a 現在是 2,原本的 1 不見了! b = a # b 還是 2 (不是我們要的 1) # 結果:a=2, b=2 (交換失敗)
三種正確做法
a, b = 1, 2 # 方法一:暫存變數(最通用,所有語言都適用) temp = a a = b b = temp # a=2, b=1 ✓ # 方法二:Python tuple 解包(最 Pythonic) a, b = b, a # 右側先建立 tuple (2, 1),再解包賦值 # 方法三:XOR 位元運算(不需額外記憶體,進階技巧) a = a ^ b # a = 0b01 ^ 0b10 = 0b11 b = a ^ b # b = 0b11 ^ 0b10 = 0b01 (原本的 a) a = a ^ b # a = 0b11 ^ 0b01 = 0b10 (原本的 b)
上方遊戲的「無暫存模式」讓你直觀體驗資料被覆蓋的結果;「有暫存模式」則完整模擬方法一的三步驟過程。