Skip to content

3.3 タプル

タプルは、リストと同様に任意の要素を集めたシーケンスです。リストとは異なり、 タプルはイミュータブル(変更不可) であるため、定義した後に要素を追加、削除、変更することはできません。いわば「定数リスト」のようなデータ構造です。

空のタプルは () を使って作成します。1つ以上の要素を持つタプルを作る場合、タプルを定義しているのは実際にはかっこではなく「カンマ」です。要素全体をかっこで囲むのは任意ですが、囲むことでタプルであることが分かりやすくなります。

# 空のタプル
empty_tuple = ()
# 1要素のタプル(末尾のカンマが必須)
one_marx = 'Groucho',
print(one_marx) # ('Groucho',)
# 複数要素のタプル(カンマで区切る)
marx_tuple = 'Groucho', 'Chico', 'Harpo'
# かっこで囲む(一般的な書き方)
marx_tuple_with_parens = ('Groucho', 'Chico', 'Harpo')

tuple() 変換関数を使えば、リストなど他のシーケンスからタプルを作成することができます。

marx_list = ['Groucho', 'Chico', 'Harpo']
print(tuple(marx_list)) # ('Groucho', 'Chico', 'Harpo')

タプルを使うと、一度に複数の変数へ値を代入することができます。これは「タプルのアンパック」と呼ばれます。

marx_tuple = ('Groucho', 'Chico', 'Harpo')
a, b, c = marx_tuple
print(a) # Groucho
print(b) # Chico
print(c) # Harpo

他言語では一時変数(tempなど)が必要になる変数の値の交換も、タプルを使えば1行でシンプルに記述できます。

password = 'swordfish'
icecream = 'tuttifrutti'
# 一時変数を使わずに値を交換
password, icecream = icecream, password
print(password) # tuttifrutti
print(icecream) # swordfish

作成後に書き換えられないため、タプルには append()insert() といった関数がありません。それでもリストの代わりにタプルを使うべき理由(メリット)には、以下のようなものがあります。

  • 消費スペースが小さい: リストよりもメモリの消費が少なくなります。
  • 安全性が高い: 誤って要素を書き換えてしまう危険がありません。
  • 辞書のキーとして使える: イミュータブルであるため、辞書のキーとして利用できます(リストは不可)。
  • 関数の引数: 関数の引数はタプルとして渡されます。