Pythonのタプルはなぜイミュータブルなのか?その理由と意味をやさしく解説

こんにちは。ゆうせいです。
今回は「タプル(tuple)はなぜイミュータブル(immutable)なのか?」というテーマで、Pythonの基本構造のひとつを深掘りしていきましょう。
「イミュータブルってなに?」という人も、「リストとの違いがよくわからない…」という人も、安心してください。わかりやすく、かみくだいて説明します!
タプルとは?リストとの違いを整理しよう
まずは、タプル(tuple)そのものが何なのかを押さえておきましょう。
タプルの例
my_tuple = (1, 2, 3)
一方、リスト(list)はこんな感じ。
my_list = [1, 2, 3]
見た目はほとんど同じですが、使っているカッコが違いますね。
- タプル → 丸カッコ:
()
- リスト → 角カッコ:
[]
違いを表で比較!
特徴 | タプル (tuple) | リスト (list) |
---|---|---|
変更可能か | いいえ(イミュータブル) | はい(ミュータブル) |
速度 | やや速い | やや遅い |
用途 | 固定されたデータ | 可変なデータ |
書き換え | できない | できる |
「イミュータブル」とはどういうこと?
ここで出てきたイミュータブル(immutable)という言葉。これはプログラミングにおいてよく使われる用語です。
意味をかんたんに言うと…
「中身をあとから変更できない」こと
たとえば、タプルを作ったあとで中の値を変えようとするとエラーになります。
my_tuple = (1, 2, 3)
my_tuple[0] = 99 # ← エラーになる!
なぜタプルはイミュータブルなのか?
いよいよ本題に入っていきましょう。「なぜ」変更できないようになっているのか。
理由は大きく分けて 3つ あります。
① 安全性と信頼性のため
イミュータブルなデータは、うっかり変更されないというメリットがあります。
たとえば関数にデータを渡すとき、「呼び出し元のデータが変わってしまう」とバグの原因になります。でも、イミュータブルなら安心ですね。
② ハッシュ化できるから
これはちょっと専門的ですが重要な話。
Pythonでは、辞書(dict)のキーにタプルは使えますが、リストは使えません。
my_dict = {(1, 2): "hello"} # OK!
my_dict = {[1, 2]: "hello"} # エラー!
これは「ハッシュ化(hashing)」が関係しています。
ハッシュとは?
データに「一意な番号(ハッシュ値)」をつけて、素早くアクセスできるようにする技術
ハッシュ化には「変わらない(イミュータブル)こと」が必要なんです。
変更できるリストはハッシュ値が不安定なので、キーにできません。
③ 処理が速くなるから
タプルは「一度作ったらもう変わらない」という前提があるので、Pythonの内部ではリストよりも効率よく扱えることがあります。
とくに、関数の引数としてよく使われる場面では、そのスピードと軽さが大きな武器になります。
例え話:イミュータブル vs ミュータブル
ちょっとイメージしやすくするために、例え話をしましょう。
- タプルは「石に刻まれた文字」
- リストは「ホワイトボードに書いた文字」
石に刻んだ文字は後から変えられません。でもそのぶん、いつ見ても同じで信頼できます。
ホワイトボードは何度でも書き直せますが、うっかり消してしまうリスクもある。
タプルとリストの違いも、まさにそんなイメージです!
まとめ:タプルがイミュータブルな理由
- 変更できないことで、安全性と信頼性が高まる
- ハッシュ可能なので、辞書のキーなどに使える
- 処理が高速になる
今後の学習のヒント
タプルの特徴がわかったら、次はこんなテーマにも挑戦してみましょう。
namedtuple
やdataclass
での応用的な使い方- タプルのネスト(タプルの中にタプル)
- リストとタプルの使い分けの実例
- イミュータブルな他の型(str, frozensetなど)
いろいろ試して、「なぜこういう設計になっているのか?」を考えるクセをつけると、Pythonの理解がどんどん深まりますよ。
それでは、次回もお楽しみに!
セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク
投稿者プロフィール

- 代表取締役
-
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。