Python

【Python】tuple(タプル)の使い方

この記事では、Pythonのtuple(タプル)の使い方を解説します。

タプルは、異なったデータ型の集まりを格納できるシーケンスです。しかし、インスタンス化した後は要素を追加・削除・変更することができません。

それでは、タプルについて見ていきましょう❗️

tuple(タプル)とは?

タプルとは、異なる型の要素を任意の数だけ格納できるシーケンスです。

シーケンスとは、複数の要素が一定の順序で並んでいるオブジェクトのこと

最大の特徴は インスタンス化した後に要素を追加・削除・変更できないことです。

そのような性質を「イミュータブル」と呼びます。

ミュータブルとイミュータブル

タプルには要素を変更するようなメソッドが定義されていないためリストよりもメモリ効率が良い。なので、要素を変更しない場合、リストよりもタプルを使いましょう!

タプルは、一時的に要素をまとめたい場合などによく使われます。

また、要素を名前で呼び出せる「名前付きタプル」というのもある。

タプルの生成・初期化

タプルは、()を使って生成します。

変数名 = ()

tuple()を使っても生成できます。

変数名 = tuple()

要素を,(カンマ)区切りで記述することで、初期値を指定できます。

変数名 = 要素1, 要素2, ..., 要素N

または

変数名 = (要素1, 要素2, ..., 要素N)

要素が1つの場合は、以下のように初期化できます。

変数名 = 要素,
タプルを作るのはカンマであり、丸括弧ではない

タプルの演算

タプルはシーケンスなのでシーケンス演算が使用可能です。

# タプル生成
t = 1, 2, 3

# インデックスから要素取得
print(t[1])

# スライス
print(t[1:3])

# 要素の有無
print(2 in t)

実行結果

2
(2, 3)
True

シーケンスの使い方と特徴を解説

どんな時に使う?

タプルは要素の変更ができないオブジェクトなので、長く使うというより一時的に使われることが多いです。よく使われる場面としては、関数の戻り値で複数の値を返したい時に使われます。

def func():
    # カンマ区切りで返す
    return 1, 2, 3

val = func()
print(val)

# アンパックでバラバラに受け取る
val1, val2, val3 = func()
print(val1, val2, val3)

実行結果

(1, 2, 3)
1 2 3

このように、複数の値を一時的にまとめるのに使われます。

消費メモリを比べる

タプルはリストよりも軽いと言っていますが、どの程度なのか調べてみましょう。オブジェクトの__sizeof__メソッドを呼び出すことでサイズを確認できます。

l = [1, 2, 3]
print(l.__sizeof__())

t = 1, 2, 3
print(t.__sizeof__())

実行結果

104
48

まさかの半分以下でした❗️

変更が必要ない時は、タプルを使うように心がけましょう。

オブジェクトのサイズ(メモリ消費量)を確認する

余談: tupleは変更できない...?

タプルは要素の追加や削除はできません。しかし、タプル同士を連結させることで、新たなタプルを生成することはできます。

以下の例を見てください。

t1 = 1, 2, 3
t2 = 4, 5

t = t1 + t2

print(t)
# (1, 2, 3, 4, 5)

t1 と t2 を連結させた t を生成できました。また、一時的にリストに変換することで他の処理も可能です。

t = 1, 2, 3

# リストに変換
l_t = list(t)


# 要素の追加
l_t.append(4)

print(l_t)
# [1, 2, 3, 4]


# 要素の削除
l_t.remove(1)

print(l_t)
# [2, 3, 4]


# タプルに変換
t = tuple(l_t)
print(t)
# (2, 3, 4)

このようにリストに変換することで要素を変更できます。

まとめ

この記事では、Pythonのtuple(タプル)の使い方を解説しました。

複数の要素を扱いたい場合、汎用性の高いリストを使うことが多いですが、変更が必要ない場合は、タプルを使った方がメモリを節約することができます。

それでは今回の内容はここまでです!ではまたどこかで〜( ・∀・)ノ