リストとタプルの違い

Pythonには、複数のデータをまとめて扱うための代表的なコレクション型としてリスト(List)とタプル(Tuple)があります。これらは一見すると非常に似ていますが、最大の違いは「後から中身を変更できるかどうか」です。すなわち、リストは変更可能(mutable / ミュータブル)であり、タプルは変更不可能(immutable / イミュータブル)という決定的な性質の違いがあります。この記事では、両者の違いを比較しながら、実務における具体的な使い分けについて詳しく解説します。
リストとタプルの定義
まず、リストとタプルの定義方法をおさらいしましょう。
# リストの定義
fruits_list = ["apple", "banana", "cherry"]
# タプルの定義
fruits_tuple = ("apple", "banana", "cherry")
print(fruits_list) # ['apple', 'banana', 'cherry']
print(fruits_tuple) # ('apple', 'banana', 'cherry')
リストは角括弧 [] を使い、タプルは丸括弧 () を使って定義します。画面に出力した際も、それぞれの括弧の形でどちらのデータ型かが判別できるようになっています。
主な違い一覧表
リストとタプルの主な違いは、変更可能性(ミュータビリティ)に起因します。この性質の差によって、内部の処理速度や適した用途が変わってきます。
| 比較項目 | リスト(List) | タプル(Tuple) |
|---|---|---|
| 括弧の記号 | [] 角括弧 |
() 丸括弧 |
| 変更可能性 | 変更可能(mutable) | 変更不可能(immutable) |
| メソッドの種類 | append(), remove() など多数 |
count(), index() のみ(追加・削除系は全滅) |
| 処理速度 | タプルに比べるとやや遅い | シンプルで高速 |
| メモリ効率 | 要素の増減に備えるため消費が多め | 固定サイズなので最小限で済む(軽量) |
リストの操作例(データの動的な変化)
リストは変更可能なため、要素の追加、削除、中身の書き換えが自由自在に行えます。
# リストの動的な操作
fruits_list = ["apple", "banana"]
# 要素の末尾追加
fruits_list.append("cherry")
print(fruits_list) # ['apple', 'banana', 'cherry']
# 要素の特定値削除
fruits_list.remove("banana")
print(fruits_list) # ['apple', 'cherry']
# 要素の直接上書き変更
fruits_list[0] = "grape"
print(fruits_list) # ['grape', 'cherry']
リストは要素が変化する前提で作られているため、プログラムの実行中に中身がどんどん変わるようなシチュエーションで威力を発揮します。
タプルの操作例(データの固定・保全)
一方、タプルは一度定義すると、中の要素を上書きしたり破壊したりすることはできません。ただし、中身を「読み出す」操作(インデックスによる指定やスライス)はリストと全く同じように使えます。
# タプルの操作
fruits_tuple = ("apple", "banana", "cherry")
# 以下の書き換え操作は、Pythonのシステムが強制的にエラーを出してブロックします
# fruits_tuple[0] = "grape" # TypeError: 'tuple' object does not support item assignment
# データの読み出し(アクセス)やスライス(一部分の切り出し)は可能です
print(fruits_tuple[0]) # apple
print(fruits_tuple[1:]) # ('banana', 'cherry')
追加解説:実務における「リスト」と「タプル」のスマートな使い分け
「どちらを使ってもエラーにならない」という場面において、プログラマはどのようにこの2つを使い分けているのでしょうか。その設計思想(定番のユースケース)を知ることで、よりPythonらしいコードが書けるようになります。
1. リストを選ぶべきシチュエーション:【同質のデータの集まり】
リストは、「同じ種類(データ型)のデータが、いくつ入ってくるか事前に決まっていない状態」でよく使われます。例えば、ショッピングサイトの「カートの中身の商品一覧」や、SNSの「タイムラインの投稿一覧」などです。ユーザーの操作によって要素数が0個にも100個にも増減するため、動的に動かせるリストが最適です。
2. タプルを選ぶべきシチュエーション:【意味を持った固定のセット】
タプルは、「1つひとつの位置(インデックス番号)に特別な意味があり、要素数が固定されているデータのセット」によく使われます。例えば、地図の (緯度, 経度)、RGBの (R, G, B) の色情報、あるいはデータベースの1行分にあたる (ユーザーID, 名前, メールアドレス) といった、セットで1つの意味を成し、途中でバラバラになっては困るような重要データの保護に最適です。
まとめ
リストとタプルは、データの「変更可能性(ミュータビリティ)」が異なる、Pythonにおける2大コレクションです。要素が常に増減・変化し、同じ種類のデータをたくさん詰め込みたいときは「リスト」を、処理を高速化させつつ、中身の書き換えを絶対に防いでデータの安全性を守りたいときは「タプル」を選択します。それぞれのキャラクター(強み)を正しく理解し、データ構造をスマートに設計できるようになりましょう。