タプル: 変更不可のシーケンス

リストと似てるけど変更不可。意図しない変更を防ぐ。

タプル
イミュータブルなシーケンス。
イミュータブル
作成後に変更不可。
アンパック
複数変数に一度に代入。

タプルとは?

密封されたタイムカプセル (Sealed Time Capsule)

タプルは一語で言えば「リストの変更不可版」ですが、イメージは「タイムカプセル」です。一度中身を決めてフタを閉じたら(作成したら)、二度と変えることはできません。中を見る(アクセス)ことはできますが、差し替えたり削除したりは不可能です。

「変更できない」というのは不便に思えるかもしれませんが、実は強力なメリットです。辞書のキーとして使えたり、関数から複数の値を安全に返したり、うっかりデータを書き換えてしまうバグを未然に防いだりできます。

Tuple Basics
# タプルの作成
point = (10, 20)
rgb = (255, 128, 0)
# アンパック
x, y = point
r, g, b = rgb
# イミュータブル(変更不可)
# point[0] = 5 # エラー!
# アクセス
first = point[0]
last = rgb[-1]
# 関数から複数の値を返す
def get_user():
return ("Alice", 30, "alice@example.com")
name, age, email = get_user()
Bad
# ❌ Bad: リストで変更不要なデータ
config = ["localhost", 8080, True]
config[0] = "0.0.0.0" # 意図しない変更
Good
# ✅ Good: タプルで不変を保証
config = ("localhost", 8080, True)
# config[0] = ... # エラーで防止

高度な使い方

NamedTuple & More
# 名前付きタプル
from typing import NamedTuple
class Point(NamedTuple):
x: float
y: float
label: str = ""
p = Point(10, 20, "A")
print(p.x, p.y) # 名前でアクセス
# タプルのメソッド
nums = (1, 2, 3, 2, 1)
nums.count(2) # 2
nums.index(3) # 2
# シングルトン(要素1つ)
single = (42,) # カンマ必須
# 辞書のキーとして(イミュータブルなので可)
cache = {(0, 0): "origin", (1, 0): "east"}
Tip: 複数の値を返すときはタプルで。NamedTuple で可読性向上。

合格ライン

タプルのアンパックができる
NamedTuple を使える

演習課題

課題1: アンパック
タプルのアンパックを使ってください。
課題2: NamedTuple
NamedTuple で構造体を作成してください。