發表文章

Python 變數是參考還是值?用實驗帶你看懂

在學習 Python 的過程中,常常有人會問: Python 變數是 傳值 (by value) 還是 傳參考 (by reference)? 為什麼有時候改變一個變數,另一個也跟著變了? 為什麼 += 和 + 看似相同,卻會造成不同結果? 本文將用一段簡單程式碼,帶你理解 Python 的 變數綁定機制 以及 mutable vs immutable 的差異。 在 Python 中,所有東西都是物件 (object)。 變數只是「名稱 (name) → 物件 (object)」的綁定。 本質上永遠是 reference,但行為會因 mutable 或 immutable 而不同。 Immutable 型別:int, float, str, tuple … 不可變,任何修改都會生成新物件。 Mutable 型別:list, dict, set, 自訂 class … 可變,修改會直接影響同一個物件。 以下是程式範例: a = [1] print(a) b = a print(type(a), type(b)) print(a, b) print(id(a), id(b)) b += [2] print(a, b) print(id(a), id(b)) b.append(3) print(a, b) print(id(a), id(b)) b = b + [4] print(a, b) print(id(a), id(b)) 而你可以觀察到 print 出來的結果會是: >>> [1] >>> <class 'list'> <class 'list'> >>> [1] [1] >>> 139702957538944 139702957538944 >>> [1, 2] [1, 2] >>> 139702957538944 139702957538944 >>> [1, 2, 3] [1, 2, 3] >>> 139702957538944 139702957538944 >>> [1, 2, 3] [1, 2, 3, 4] >>> 1...