Pythonには、複数のデータをまとめて管理するためのデータ型がいくつかあります。その中でも**タプル(tuple)**は、リスト(list)と非常によく似ていますが、一つだけ決定的な違いがあります。
それは、タプルは一度作成すると、その中身を変更・追加・削除できない「イミュータブル(変更不可能)」であるという点です。
この記事では、タプルの基本的な作成方法と、リストとの違いについて解説します。
1. ()(丸括弧)を使ったタプルの作成
タプルを作成する最も基本的な方法は、()(丸括弧)で複数の要素を囲み、カンマ(,)で区切ることです。
# 複数の要素を持つタプル
server_settings = ("192.168.0.1", 8080, "production")
print(server_settings)
print(f"型: {type(server_settings)}")
実行結果:
('192.168.0.1', 8080, 'production')
型: <class 'tuple'>
空のタプルの作成
() のみで、中身が空のタプルを作成できます。
empty_tuple = ()
print(f"空のタプル: {empty_tuple}")
注意:要素が1つだけのタプル
タプルを作成する上で、最も重要な注意点の一つです。要素が1つだけのタプルを作成する場合、末尾に必ずカンマ(,)が必要です。
# 1. 悪い例:これはタプルではなく、ただの文字列 'admin' になる
user_role_bad = ("admin")
print(f"悪い例の型: {type(user_role_bad)}")
# 2. 良い例:末尾にカンマを付ける
user_role_good = ("admin",) # カンマ(,) が重要
print(f"良い例の型: {type(user_role_good)}")
実行結果:
悪い例の型: <class 'str'>
良い例の型: <class 'tuple'>
( ) は計算の優先順位を示す括弧としても使われるため、("admin") は単なる "admin" と解釈されます。("admin",) とすることで、初めてタプルとして認識されます。
2. 丸括弧の省略
タプルは、文法的に ()(丸括弧)がなくても、カンマ区切りで値を並べるだけで作成できます。
# 括弧を省略したタプル(多重代入などでよく使われる)
color_code = 255, 165, 0 # (255, 165, 0) と同じ意味
print(color_code)
print(f"型: {type(color_code)}")
実行結果:
(255, 165, 0)
型: <class 'tuple'>
関数の戻り値が複数あるように見える場合(return x, y)、実際にはタプルが返されています。
3. tuple() コンストラクタによる変換
tuple() コンストラクタを使用すると、リスト(list)や range() のような他の「イテラブル(反復可能オブジェクト)」をタプルに変換できます。
# リストをタプルに変換する
user_list = ["admin", "editor", "guest"]
user_tuple = tuple(user_list)
print(f"元のリスト: {user_list}")
print(f"変換後のタプル: {user_tuple}")
実行結果:
元のリスト: ['admin', 'editor', 'guest']
変換後のタプル: ('admin', 'editor', 'guest')
4. タプルの性質:イミュータブル(変更不可能)
タプルとリストの最大の違いは、タプルは一度作成すると変更できない点です。
リスト(list)では可能だった要素の変更、追加、削除が、タプルではエラーとなります。
server_settings = ("192.168.0.1", 8080, "production")
# 要素を変更しようとするとエラー
# server_settings[1] = 9090
# TypeError: 'tuple' object does not support item assignment
# 要素を追加しようとするとエラー
# server_settings.append("new_value")
# AttributeError: 'tuple' object has no attribute 'append'
なぜタプルを使うのか?
変更できないという性質は、一見不便に見えますが、以下のようなメリットがあります。
- データの保護: 意図しない変更を防ぎたいデータ(例:設定値、座標)を格納するのに適しています。
- 辞書のキー: タプルはイミュータブル(不変)であるため、辞書(
dict)のキーとして使用できます(ミュータブル(可変)なリストはキーになれません)。 - パフォーマンス: 一般的に、リストよりもわずかに高速に動作し、メモリ消費も少ないとされています。
まとめ
- タプルは
(1, 2, 3)のように()で作成します。 - 要素が1つの場合は
(1,)のように末尾のカンマが必須です。 ()は省略可能です(1, 2, 3)。tuple(list)でリストから変換できます。- 最大の特徴は「イミュータブル(変更不可能)」であり、一度作成すると中身を変えられません。
