Pythonのlistとtupleの違い|変更できる・できないを初心者向けに解説
この記事でわかること
- Pythonのlistとtupleに共通すること
- 要素を後から変更できるかどうかの違い
- 1要素のtupleで末尾のカンマが必要な理由
- tupleを辞書のキーにできる条件
- 迷ったときに実務でどう使い分けるか
結論・重要ポイント
- listは変更可能なシーケンスで、要素の追加、削除、置き換えができます。
- tupleは変更不可能なシーケンスで、作成後に要素そのものを追加、削除、置き換えできません。
- どちらも順序を持ち、インデックス、スライス、繰り返し処理を使えます。
- 1要素のtupleは (value,) のように末尾のカンマが必要です。
- 後から項目を変える一覧にはlist、組み合わせを固定して扱いたい値にはtupleが基本です。
対象読者と前提知識
この記事は、Pythonを学び始めて、角括弧のlistと丸括弧で表すことが多いtupleの使い分けに迷っている方向けです。
変数、文字列、数値、print関数の基本が分かれば読み進められます。例はPython 3で実行できます。
MAO先生と学ぶlist・tuple
生徒うみちゃん
listは角括弧、tupleは丸括弧で書くんだよね?見た目以外は同じってこと?
MAO先生
どちらも順序を持つシーケンスですが、大きな違いは作成後に要素を変更できるかです。listは変更でき、tupleは要素を置き換えられないのです。
生徒うみちゃん
買い物リストみたいに、あとから項目を足すならlistを選べばいいじゃん!
MAO先生
その選び方で合っています。よく気づきましたね!追加や削除が前提の一覧には、appendやremoveを使えるlistが自然です。
生徒りくちゃん
tupleが変更できないなら、中に入れた値はどのような場合でも一切変わらないのですか?
MAO先生
そこは注意が必要です。tupleの要素を別の要素へ置き換えることはできません。ただし、要素として入っているlist自体の中身は変更できます。tupleだから内部のすべてが自動的に固定されるわけではありません。
生徒うみちゃん
じゃあ、変更されたくない設定は全部tupleにすれば安心じゃん!
MAO先生
tupleは意図を示す助けになりますが、名前付きの設定なら辞書やデータクラスの方が読みやすい場合もあります。位置番号だけで意味が分かりにくくなるなら、別の構造を選ぶのです。
生徒りくちゃん
tupleは辞書のキーにも使えると聞きました。どのようなtupleでもキーにできるのでしょうか?
MAO先生
いい質問です。文字列や数値だけを含むtupleなど、構成要素がすべてハッシュ可能な場合に使えます。中にlistが含まれるtupleはハッシュできないため、辞書のキーにはできません。
生徒りくちゃん
変更する一覧はlist、固定した組み合わせはtupleを基本にしつつ、読みやすさや中身の型も確認するということですね!
生徒うみちゃん
括弧の形だけで決めるんじゃなくて、あとから変える予定があるかを先に考えれば迷わないじゃん!
コード・操作手順・具体例
1. listは要素を変更できる
次のコードでは、作業項目を追加し、先頭の要素を置き換えます。
tasks = ["見積書を作る", "メールを返す"]
tasks.append("請求書を確認する")
tasks[0] = "見積書を送る"
print(tasks)
実行結果は次のとおりです。
['見積書を送る', 'メールを返す', '請求書を確認する']
appendは末尾への追加、tasks[0]への代入は先頭要素の置き換えです。どちらも元のlistを変更します。
2. tupleの要素は置き換えられない
座標のように2つの値を組として扱う例です。
point = (120, 80)
print(point[0])
point[0] = 200
最後の行で、次のTypeErrorが発生します。
TypeError: 'tuple' object does not support item assignment
変更後の座標が必要なら、元のtupleを書き換えるのではなく、新しいtupleを作ります。
point = (120, 80)
point = (200, point[1])
print(point)
3. 1要素のtupleにはカンマが必要
丸括弧だけでは1要素のtupleになりません。型を表示して違いを確認します。
not_tuple = ("Python")
one_item_tuple = ("Python",)
print(type(not_tuple))
print(type(one_item_tuple))
実行結果は、1つ目がstr、2つ目がtupleです。Pythonでは丸括弧ではなくカンマがtupleを作るため、1要素では末尾のカンマを省略できません。
4. listとtupleを変換する
処理中だけ変更し、最後に固定した形で渡したい場合は変換できます。
members = ["MAO先生", "生徒うみちゃん"]
members.append("生徒りくちゃん")
fixed_members = tuple(members)
editable_members = list(fixed_members)
print(fixed_members)
print(editable_members)
変換すると新しいオブジェクトが作られます。変換後に一方へ要素を追加しても、もう一方へ自動反映されません。
5. tupleを辞書のキーにする
支店番号と年度の組み合わせをキーにする例です。
sales = {
("kashiwa", 2025): 120,
("kashiwa", 2026): 145,
}
print(sales[("kashiwa", 2026)])
文字列と整数はハッシュ可能なので、このtupleは辞書のキーにできます。一方、([1, 2], 3)のようにlistを含むtupleはキーにできません。
よくある誤解や失敗
tupleなら中身が完全に固定されると思う
tupleに含まれるlistの中身は変更できます。
settings = (["mail", "chat"], "daily")
settings[0].append("phone")
print(settings)
このコードは実行でき、先頭要素のlistへ値が追加されます。入れ子の値まで変更させたくない場合は、内側も変更不可能な型にする設計が必要です。
速さだけを理由にtupleを選ぶ
型の選択では、まず変更する必要があるか、値の意味が読み取りやすいかを優先します。性能差が問題になるかはデータ量や処理内容によるため、推測だけで決めず、必要な場合に実測します。
tupleの各位置の意味が分からなくなる
**(“kashiwa”, 2026, 145)**のような値は短い例では便利ですが、項目が増えると意味を追いにくくなります。名前でアクセスした方が明確なら、辞書、collections.namedtuple、データクラスも検討します。
Q&A
listとtupleの両方でfor文を使えますか?
はい。どちらもシーケンスなので、for文、len、インデックス、スライス、inによる存在確認など、共通する操作を使えます。
tupleへ要素を追加する方法はありますか?
既存のtuple自体へ追加はできません。current + (new_value,)のように結合すると、新しいtupleが作られます。追加と削除を繰り返すなら、最初からlistを使う方が意図が明確です。
listは辞書のキーにできますか?
できません。listは変更可能でハッシュできないためです。tupleも、含まれる要素がすべてハッシュ可能な場合に限りキーとして使えます。
丸括弧があれば必ずtupleですか?
いいえ。(“Python”)は文字列です。1要素のtupleにするには**(“Python”,)と書きます。複数要素でも、実際にtuple**を作るのは値を区切るカンマです。
要点まとめ
- listは変更可能で、要素の追加、削除、置き換えに向く
- tupleは要素を置き換えられず、固定した組み合わせを表すときに向く
- どちらも順序を持つシーケンスで、インデックスや繰り返し処理を使える
- 1要素のtupleには末尾のカンマが必要
- tupleを辞書のキーにするには、含まれるすべての要素がハッシュ可能である必要がある
- 変更可能性だけでなく、各値の意味が読みやすいデータ構造を選ぶ
公式資料・参考資料
- Python公式ドキュメント:組み込み型(list・tuple・シーケンス)
- Python公式チュートリアル:データ構造
- Python公式ドキュメント:collections.namedtuple
- Python公式ドキュメント:dataclasses
※Python 3.14.6の公式資料を2026年7月7日に確認して作成しています。利用中のPythonバージョンによって細部が異なる場合は、そのバージョンの公式資料も確認してください。
Pythonを使った業務改善を相談できます
listとtupleの選択は小さな違いに見えますが、データの変更ルールをコードで明確にすると、思わぬ書き換えや読み違いを減らせます。
MAO工房では、PythonによるExcel作業の自動化、データ整理、既存コードの改善、小規模な業務ツール開発を支援しています。お問い合わせフォームから現在の作業や困りごとをお知らせください。
授業に登場する3人については、MAO先生のIT授業 キャラクター紹介で確認できます。
MAO工房に相談できます
Pythonを使った業務ツール開発を相談できます
Excel作業の自動化、データ整理、既存Pythonコードの改善など、現在の業務に合わせた小規模ツール開発を支援します。
- ✓ 繰り返し作業を自動化
- ✓ データ構造と処理を整理
- ✓ 既存コードの改善にも対応