Pythonのタプル(tuple)とは? リストとの違いと基本的な使い方

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'

なぜタプルを使うのか?

変更できないという性質は、一見不便に見えますが、以下のようなメリットがあります。

  1. データの保護: 意図しない変更を防ぎたいデータ(例:設定値、座標)を格納するのに適しています。
  2. 辞書のキー: タプルはイミュータブル(不変)であるため、辞書(dict)のキーとして使用できます(ミュータブル(可変)なリストはキーになれません)。
  3. パフォーマンス: 一般的に、リストよりもわずかに高速に動作し、メモリ消費も少ないとされています。

まとめ

  • タプルは (1, 2, 3) のように () で作成します。
  • 要素が1つの場合は (1,) のように末尾のカンマが必須です。
  • () は省略可能です(1, 2, 3)。
  • tuple(list) でリストから変換できます。
  • 最大の特徴は「イミュータブル(変更不可能)」であり、一度作成すると中身を変えられません。
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次