Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】Python Lists vs. Tuples: Choosing the Right Tool

2025年09月15日に「Dev.to」が公開したITニュース「Python Lists vs. Tuples: Choosing the Right Tool」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

Pythonのリストとタプルは、複数の要素を順序付けて扱うデータ構造だ。リストは作成後に要素の追加・変更・削除が可能な「可変(ミュータブル)」である一方、タプルは一度作成すると変更できない「不変(イミュータブル)」である。データの変更が必要か否かで使い分けるのが重要だ。

ITニュース解説

システムエンジニアを目指す皆さんにとって、Pythonの学習は非常に重要なステップだ。変数の扱い方や繰り返し処理の概念を理解したら、次に押さえておくべきなのが、Pythonの基本的なデータ構造である「リスト」と「タプル」である。これら二つのデータ構造は、多くの点で似ているため、最初は区別がつきにくいかもしれないが、その決定的な違いを理解することが、より高度なPythonプログラミングへの道を開くことになる。

リストとタプルはどちらも、順序付けられた複数の項目を格納できるコンテナだ。各項目にはインデックス番号が割り当てられており、それを使って特定の項目にアクセスできる点も共通している。例えば、my_sequence[0]のように記述することで、最初の項目を取得できる。しかし、両者の最も重要な違いは「ミュータビリティ(変更可能性)」という概念に集約される。

まず、リストについて説明する。リストは「ミュータブル」、つまり作成された後でも内容を変更できるデータ構造だ。これは、プログラムの実行中に項目を追加したり、既存の項目を削除したり、あるいは特定の項目を別の値に変更したりできることを意味する。リストを作成する際は、角括弧 [] を使用する。例えば、shopping_list = ["apples", "coffee", "bread"]のように記述すると、3つの項目を持つリストが作成される。このリストは、プログラムの進行に応じて自由に修正可能だ。例えば、shopping_list[1] = "espresso"とすれば、2番目の項目が"coffee"から"espresso"に変更される。また、shopping_list.append("eggs")とすれば、リストの末尾に"eggs"が追加され、shopping_list.remove("bread")とすれば、"bread"がリストから削除される。これらの操作の結果、shopping_list['apples', 'espresso', 'eggs']となる。このように、リストはプログラムのライフサイクルを通じて内容が変化する可能性のあるコレクションを扱うのに非常に適している。具体的な利用場面としては、ユーザーが追加・削除するToDoリストの項目、データベースから取得して加工・集計する動的なデータセット、あるいは頻繁に変更される可能性のある設定値などが挙げられる。append()remove()sort()といったリスト専用のメソッドが必要な場合も、リストが最適な選択となる。

次に、タプルについて説明する。タプルは「イミュータブル」、つまり一度作成されると、その内容を後から変更できないデータ構造だ。これは、タプルに含まれる項目が作成された時点から固定され、追加、削除、変更といった操作が一切できないことを意味する。タプルを作成する際は、通常、丸括弧 () を使用する。例えば、user_credentials = ("john_doe", "hashed_password_123")のように記述すると、ユーザー名とハッシュ化されたパスワードという二つの項目を持つタプルが作成される。このタプルは、リストと同様にインデックスを使って項目にアクセスすることは可能だ。例えば、print(user_credentials[0])とすればjohn_doeが出力される。しかし、user_credentials[0] = "new_user"のような代入操作を行おうとすると、PythonはTypeErrorを発生させ、変更を許可しない。タプルがイミュータブルであるという特性は、データの整合性を保証する上で非常に役立つ。意図しない変更からデータを保護したい場合にタプルは最適だ。具体的な利用場面としては、一度設定したら変更すべきではないシステムの設定値(例:ポート番号、環境モードなど)、データベースから取得したレコードのうち変更を許さないフィールドの組み合わせ、関数が複数の値を返す場合にその値の並びが固定されている必要があるケース、そして辞書のキーとして使用するデータなどが挙げられる。辞書のキーはイミュータブルである必要があるため、タプルは辞書のキーとして有効に利用できるが、リストは利用できない。

ここで、リストとタプルの主要な違いを整理しておく。ミュータビリティの観点からは、リストは変更可能(Mutable)であり、タプルは変更不可能(Immutable)である。構文の観点からは、リストは角括弧 [] を使い、タプルは丸括弧 () を使う。主なユースケースとしては、リストはプログラム実行中に変化する可能性のあるデータに適しており、タプルは作成後に一定であるべき定数データに適している。パフォーマンスについては、タプルの方がリストよりもわずかに高速である場合があるが、この速度差はほとんどの場合無視できるレベルであり、リストとタプルを選択する主要な基準とはならない。最も重要な選択基準は、やはりミュータビリティの要件だ。

では、実際にどちらを使うべきかという判断はどのように行えば良いだろうか。非常にシンプルなルールがある。「このデータの集合は、一度作成した後で内容を変更する必要があるか?」という問いを自分自身に投げかけてみてほしい。もし答えが「はい、変更する必要がある」ならば、迷わずリストを使うべきだ。例えば、ユーザーが入力する項目を追加・削除したり、データを並べ替えたりするようなケースがこれに該当する。一方、答えが「いいえ、変更する必要はない」あるいは「変更されては困る」という場合は、タプルを選択するのが適切である。例えば、システムの設定情報や、変更されてはならないIDとパスワードの組み合わせ、あるいは関数から返される一連の固定値などがこれに当たる。

タプルを意図的に選択することは、単にコードを記述するだけでなく、「自己説明的なコード」を書くことにもつながる。つまり、そのタプルを見た誰もが「このデータは完全であり、変更されるべきではない」というメッセージを読み取ることができるのだ。これは、複数人での開発や、将来のメンテナンスにおいて非常に重要な要素となる。リストとタプルのこの違いを深く理解し、状況に応じて適切に使い分ける能力は、明確で効率的、そして「Pythonらしい」コードを書くための基礎となる。これら順序付けられたデータ構造をマスターした皆さんは、次にPythonのもう一つの主要なデータ構造である「辞書」(キーと値のペアでデータを管理する強力なツール)について学ぶ準備ができていると言えるだろう。