Python Tuple(Python Tuple)
這篇 Python Tuple 教學將帶你認識元組(Tuple):一個和 List 很像、但建立後不能修改的容器。看起來像是功能比較少的 List,但「不可變」正是它的價值——適合存放不應該被改動的資料,例如座標、設定值、函式回傳的多個值。
Tuple 與 List 差異比較
| 比較項目 | Tuple | List |
|---|---|---|
| 符號 | (1, 2, 3) | [1, 2, 3] |
| 可否修改 | 不可(immutable) | 可(mutable) |
| 適用情境 | 固定不變的資料 | 會增刪改的資料 |
| 可當 dict 的 key | 可以 | 不行 |
| 效能 | 略快、省記憶體 | 較彈性 |
建立 Tuple
用小括號 () 建立,其實逗號才是重點,括號可省略:
point = (3, 5)
rgb = 255, 128, 0 # 不加括號也是 Tuple
single = (42,) # 單元素一定要逗號!
print(point)
print(type(rgb))
print(type(single))
執行輸出:
(3, 5)
<class 'tuple'>
<class 'tuple'>
索引與切片的用法和 List 完全相同:
point = (3, 5)
print(point[0])
print(point[-1])
執行輸出:
3
5
但嘗試修改就會報錯:
point = (3, 5)
point[0] = 10
執行輸出:
TypeError: 'tuple' object does not support item assignment
Tuple 解包(Unpacking)
把 Tuple 的元素一次拆給多個變數,是 Python 非常常用的寫法:
point = (3, 5)
x, y = point # 解包
print(f"x={x}, y={y}")
# 其實多重指派、交換變數就是 Tuple 解包
a, b = 1, 2
a, b = b, a
print(a, b)
執行輸出:
x=3, y=5
2 1
函式一次回傳多個值,本質上也是回傳 Tuple(第 19 篇函式會再看到)。
Tuple 與 List 互轉
t = (1, 2, 3)
lst = list(t) # Tuple → List,變成可修改
lst.append(4)
t2 = tuple(lst) # List → Tuple
print(t2)
執行輸出:
(1, 2, 3, 4)
常見錯誤
1. TypeError: ‘tuple’ object does not support item assignment
對 Tuple 的元素指派新值。Tuple 不可修改,需要修改就先 list() 轉成 List。
2. 單元素 Tuple 忘記逗號
(42) 只是被括號包住的數字 42,不是 Tuple;(42,) 才是。這是 Tuple 最經典的陷阱。
3. ValueError: too many values to unpack
解包時變數數量與元素數量不一致,例如 x, y = (1, 2, 3)。變數個數要對齊,或用 x, *rest = (1, 2, 3) 把剩餘的收進 List。
總結
Tuple 是不可變的 List:() 建立、單元素要逗號、索引切片用法相同但不能修改;解包讓多變數指派非常優雅。原則很簡單——資料不該變就用 Tuple,會變就用 List。下一篇介紹查詢速度極快的 Dictionary。