Python: 優雅的變數交換:a, b = b, a 的底層元組拆包機制

傳統語言的「暫存變數」

在大多數程式語言中,如果你想把變數 a(值為 5)和變數 b(值為 10)的內容互相交換,你不能直接寫 a = b; b = a(這樣 a 變成 10 後,b = a 就會讓 b 也變成 10,原本 5 的資料就遺失了)。因此你必須引進第三個臨時暫存變數 temp:

C

int temp = a;

a = b;

b = temp;

Python 的一行搞定

在 Python 中,你只需要一行魔法般的代碼:

Python

a, b = b, a

底層運作原理(Tuple Unpacking

這並不是語法糖那麼簡單,Python 在底層其實運用了元組(Tuple)的封裝與拆包機制

  1. 右側封裝(Packing:Python 會先將等號右邊的 b, a 放入記憶體中,自動打包成一個無名的元組 (b, a)。此時裡面的值已經被固定下來(例如 (10, 5))。
  2. 左側拆包(Unpacking:接著,Python 會把這個元組內的位置,依序指派給等號左邊的變數 a 和 b。
    由於這個過程是在同一個指令週期中透過 CPython 解譯器內部一次性完成,因此完全不需要工程師手動去寫暫存變數,不僅程式碼極其優雅,執行效率也非常好。