Pythonのlistとtupleの違い|変更できる・できないを初心者向けに解説

#Python#list#tuple#データ構造#初心者
MAO先生と生徒うみちゃん、生徒りくちゃんが教室でPythonのlistとtupleの違いを学ぶイラスト
MAO先生と生徒たちを紹介

この記事でわかること

  • Pythonのlisttupleに共通すること
  • 要素を後から変更できるかどうかの違い
  • 1要素のtupleで末尾のカンマが必要な理由
  • tupleを辞書のキーにできる条件
  • 迷ったときに実務でどう使い分けるか

結論・重要ポイント

  1. listは変更可能なシーケンスで、要素の追加、削除、置き換えができます。
  2. tupleは変更不可能なシーケンスで、作成後に要素そのものを追加、削除、置き換えできません。
  3. どちらも順序を持ち、インデックス、スライス、繰り返し処理を使えます。
  4. 1要素のtuple(value,) のように末尾のカンマが必要です。
  5. 後から項目を変える一覧にはlist、組み合わせを固定して扱いたい値にはtupleが基本です。

対象読者と前提知識

この記事は、Pythonを学び始めて、角括弧のlistと丸括弧で表すことが多いtupleの使い分けに迷っている方向けです。

変数、文字列、数値、print関数の基本が分かれば読み進められます。例はPython 3で実行できます。

MAO先生と学ぶlist・tuple

生徒うみちゃん・疑問を感じている

生徒うみちゃん

listは角括弧、tupleは丸括弧で書くんだよね?見た目以外は同じってこと?

MAO先生・説明中

MAO先生

どちらも順序を持つシーケンスですが、大きな違いは作成後に要素を変更できるかです。listは変更でき、tupleは要素を置き換えられないのです。

生徒うみちゃん・興味深く聞いている

生徒うみちゃん

買い物リストみたいに、あとから項目を足すならlistを選べばいいじゃん!

MAO先生・笑顔

MAO先生

その選び方で合っています。よく気づきましたね!追加や削除が前提の一覧には、appendremoveを使えるlistが自然です。

生徒りくちゃん・疑問を感じている

生徒りくちゃん

tupleが変更できないなら、中に入れた値はどのような場合でも一切変わらないのですか?

MAO先生・注意している

MAO先生

そこは注意が必要です。tupleの要素を別の要素へ置き換えることはできません。ただし、要素として入っているlist自体の中身は変更できます。tupleだから内部のすべてが自動的に固定されるわけではありません。

生徒うみちゃん・自信のある表情

生徒うみちゃん

じゃあ、変更されたくない設定は全部tupleにすれば安心じゃん!

MAO先生・説明中

MAO先生

tupleは意図を示す助けになりますが、名前付きの設定なら辞書やデータクラスの方が読みやすい場合もあります。位置番号だけで意味が分かりにくくなるなら、別の構造を選ぶのです。

生徒りくちゃん・興味深く聞いている

生徒りくちゃん

tupleは辞書のキーにも使えると聞きました。どのようなtupleでもキーにできるのでしょうか?

MAO先生・説明中

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 3.14.6の公式資料を2026年7月7日に確認して作成しています。利用中のPythonバージョンによって細部が異なる場合は、そのバージョンの公式資料も確認してください。

Pythonを使った業務改善を相談できます

listtupleの選択は小さな違いに見えますが、データの変更ルールをコードで明確にすると、思わぬ書き換えや読み違いを減らせます。

MAO工房では、PythonによるExcel作業の自動化、データ整理、既存コードの改善、小規模な業務ツール開発を支援しています。お問い合わせフォームから現在の作業や困りごとをお知らせください。

授業に登場する3人については、MAO先生のIT授業 キャラクター紹介で確認できます。

MAO工房に相談できます

Pythonを使った業務ツール開発を相談できます

Excel作業の自動化、データ整理、既存Pythonコードの改善など、現在の業務に合わせた小規模ツール開発を支援します。

  • ✓ 繰り返し作業を自動化
  • ✓ データ構造と処理を整理
  • ✓ 既存コードの改善にも対応