記事内にはプロモーションが含まれています

Pythonのタプル(tuple)とは?リストとの違いや使い方を徹底解説

Pythonのタプル(tuple)とは?リストとの違いや使い方を徹底解説 プログラミングの疑問解決

年収アップの可能性を10秒チェック

現在、年収アップ額を算出中...
期待できる年収アップ額 --万円

年収アップが期待できるおすすめエージェント

Pythonで複数のデータをまとめて扱う際、多くの人が最初に学ぶのが「リスト(list)」です。
しかし、Pythonにはリストと非常によく似た「タプル(tuple)」というデータ構造も存在します。

「リストとタプル、どちらも複数の値を格納できるけど、一体何が違うの?」
「どんな時にタプルを使えばいいの?」

この記事では、そんな疑問を抱えるPython初学者の方に向けて、タプルの基本的な特徴から、リストとの明確な違い、そしてタプルの具体的な活用シーンまで、サンプルコードを交えながら分かりやすく徹底解説していきます。

【著者プロフィール&本記事の信頼性】
プロフィール
  • 著者は元エンジニア
  • 大手プログラミングスクールのWebディレクター兼 ライターを経験
  • 自らも地元密着型のプログラミングスクールを運営
著者 おすすめスクール比較
スクール名 特徴・おすすめな人 詳細・リンク
RUNTEQ 大手比較サイトで4年連続人気NO.1!Webエンジニアを目指すなら一択のスクール 評判を見る 公式サイト
RaiseTech AWSを学びたい人におすすめ!卒業後も徹底したサポートあり 評判を見る 公式サイト
デイトラ 格安でWeb制作やPythonのスキルを習得できる! 評判を見る 公式サイト
ウズカレIT 完全無料で学習からエンジニア就職支援まで一気通貫! 評判を見る 公式サイト
DMM WEBCAMP 受講コースの豊富さは随一!学びたいスキルが定まっていない人におすすめ 評判を見る 公式サイト
.Pro 高いPythonスキルが手に入る!渋谷にある少人数制の対面型スクール 評判を見る 公式サイト
CodeCamp 上場企業の子会社が運営!朝7時~夜23時40分までレッスン可能 評判を見る 公式サイト

Pythonのタプル(tuple)とは?

タプルとは、ひと言で言うと「変更不可能なリスト」です。

リストと同様に、複数の要素をカンマで区切って一つの変数に格納することができますが、その作成には[](角括弧)ではなく、()(丸括弧)を使います。

そして、タプルの最も重要な特徴は、一度作成したら、その中の要素を追加したり、変更したり、削除したりすることが一切できないという点です。

この「変更不可」という性質が、リストとの最大の違いであり、タプルが存在する理由でもあります。

# これはリスト(変更可能)
my_list = [1, 2, 3]

# これがタプル(変更不可能)
my_tuple = (1, 2, 3)

プログラムの中で、意図せず書き換えられては困るような、固定的なデータの集まりを安全に管理したい場合に、タプルは非常に役立ちます。

タプルの基本的な使い方

それでは、タプルの具体的な作成方法や操作について見ていきましょう。

タプルの作成方法

タプルは()で要素を囲んで作成します。

# 数値のタプル
tuple_a = (1, 2, 3, 4, 5)
print(tuple_a)

# 異なるデータ型を混在させることも可能
tuple_b = ('apple', 300, True)
print(tuple_b)

要素が1つのタプルを作成する際の注意点

要素が1つだけのタプルを作成する場合は、少し特殊な書き方が必要です。

# これはタプルではなく、ただの整数1
not_a_tuple = (1)
print(type(not_a_tuple))

# 要素が1つのタプルを作成するには、末尾にカンマが必要
is_a_tuple = (1,)
print(type(is_a_tuple))

実行結果

<class 'int'>
<class 'tuple'>

このように、要素が1つだけの場合は、値の後にカンマ(,)を付けないと、Pythonはそれをタプルではなく、ただの数値や文字列として解釈してしまいます。

要素へのアクセス

タプル内の各要素へのアクセス方法は、リストと全く同じです。
インデックス番号を[]で指定します。インデックスは0から始まります。

colors = ('red', 'green', 'blue')

# 最初の要素にアクセス
print(colors[0]) # 'red'

# 最後の要素にアクセス
print(colors[-1]) # 'blue'

タプルのアンパッキング

タプルの便利な機能の一つに「アンパッキング」があります。
これは、タプルの各要素を、複数の変数に一度に代入する機能です。

# ユーザー情報をタプルで定義
user_info = ('Yamada', 30, 'Tokyo')

# アンパッキングして各変数に代入
name, age, city = user_info

print(f"名前: {name}")
print(f"年齢: {age}")
print(f"都市: {city}")

実行結果

名前: Yamada
年齢: 30
都市: Tokyo

このように、複数の値をまとめて扱いたい場合に非常にコードがすっきりとします。

タプルで利用できるメソッド

タプルは変更ができないため、リストのappend()remove()のような要素を操作するメソッドは持っていません。

主に使えるのは、情報を取得するための以下の2つのメソッドです。

  • count(値): 引数に指定した値が、タプル内にいくつ含まれているかを数えます。
  • index(値): 引数に指定した値が、最初に現れるインデックス番号を返します。
data = (10, 20, 30, 20, 40, 20)

print(f"20の数: {data.count(20)}")    # 3
print(f"30のインデックス: {data.index(30)}") # 2

タプルとリストの主な違い

ここで、タプルとリストの本質的な違いを整理しておきましょう。

変更可能性(ミュータブル vs イミュータブル)

これが最も重要な違いです。
リストはミュータブル(変更可能)であり、タプルはイミュータブル(変更不可能)です。

# リストは要素の変更が可能
my_list = [1, 2, 3]
my_list[0] = 100
print(f"変更後のリスト: {my_list}") # [100, 2, 3]

# タプルは要素を変更しようとするとエラーになる
my_tuple = (1, 2, 3)
try:
    my_tuple[0] = 100
except TypeError as e:
    print(f"タプルの変更エラー: {e}")

実行結果

変更後のリスト: [100, 2, 3]
タプルの変更エラー: 'tuple' object does not support item assignment

タプルの要素を変更しようとすると、TypeErrorが発生し、プログラムが停止します。
この性質により、タプルはプログラム内で誤ってデータが書き換えられるのを防ぎ、データの安全性を保証します。

パフォーマンス(速度とメモリ)

一般的に、タプルはリストに比べて若干ですが処理が高速で、メモリの消費量も少ない傾向にあります。
これは、タプルが変更されないことが保証されているため、Pythonが内部で最適化を行いやすいからです。

ただし、この差は非常に大規模なデータを扱わない限り体感できるほどではありません。
どちらを選ぶかの主な判断基準は、やはり「変更可能性」であるべきです。

用途

これらの違いから、おのずと用途も分かれてきます。

【リスト】
要素の追加・削除・変更が頻繁に発生する、動的なデータの集まりに適しています。
(例: ユーザーのToDoリスト、ショッピングカートの中身)

【タプル】
プログラムの実行中に変わることのない、固定的なデータの組に適しています。
(例: 関数の設定値、座標データ、定数)

タプルはいつ使うべきか?

では、具体的にどのような場面でタプルを選択するとよいのでしょうか。

定数として使う

プログラム内で変わることのない、一連の値を定義したい場合に最適です。
タプルにしておくことで、誤って値を変更してしまうミスを防げます。

# 曜日をタプルで定義(変更されるべきではない)
WEEKDAYS = ('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday')

# RGBカラーコードをタプルで定義
RED = (255, 0, 0)
GREEN = (0, 255, 0)

辞書のキーとして使う

Pythonの辞書(dict)のキーには、リストのような変更可能なオブジェクトは使えません。
しかし、変更不可能なタプルは辞書のキーとして利用できます。

# 緯度経度をキーとして、都市名を格納する辞書
locations = {
    (35.6895, 139.6917): "Tokyo",
    (40.7128, -74.0060): "New York"
}

print(locations[(35.6895, 139.6917)]) # "Tokyo"

関数の戻り値として使う

関数から複数の値を返したい場合、タプルは非常にエレガントな解決策となります。

関数は戻り値としてタプルを返し、呼び出し元はそれをアンパッキングして受け取ります。

def get_user_profile():
    name = "Sato"
    age = 45
    return name, age # 自動的に (name, age) というタプルが返される

# アンパッキングで戻り値を受け取る
user_name, user_age = get_user_profile()

print(f"{user_name}さんは{user_age}才です。") # Satoさんは45才です。

これは、Pythonで非常によく使われるテクニックです。

初心者がPythonのタプルやリストなどについて効率的に学ぶには

タプルやリストをはじめとするPythonのスキルを効率的に習得するには、プログラミングスクールの活用が最も近道です。

スクールでスキルを高めることにより、今の仕事に活かしたり、副業として高単価な案件を受注できたりするだけでなく、Pythonエンジニアとして転職することも可能になります。

Pythonエンジニアは需要が非常に高いため、それに比例して年収も高くなる傾向にあります。
「今よりも年収を上げたい」「将来性の高い職種であるエンジニアへ転職したい」といった気持ちが強い場合は、プログラミングスクールでPythonの専門スキルを習得しつつ、ポートフォリオ支援や転職支援を受けてエンジニアへ転職する、という道を目指すのもよいでしょう。

なお、「Pythonに強く、受講生からの評判も良いプログラミングスクール」には、以下のようなところがあります。

その他、以下の記事でもPythonのおすすめスクールをまとめていますので、興味のある方は是非参考にしてください。

おすすめエージェント
当ブログ著者
当ブログ著者
\ 登録・利用はすべて完全無料! /
未経験からのエンジニア転職を成功させたい
ユニゾンキャリア
実務未経験エンジニアでも希望の転職先を見つけやすい!!

スキルを活かして副業で稼ぎたい
MidWorks(ミッドワークス)
週1~3日からできる副業案件多数!!

フリーランスとして高単価な案件を獲得したい
レバテックフリーランス
フリーランス案件の単価の高さは圧倒的!!
著者 おすすめスクール比較
スクール名 特徴・おすすめな人 詳細・リンク
RUNTEQ 大手比較サイトで4年連続人気NO.1!Webエンジニアを目指すなら一択のスクール 評判を見る 公式サイト
RaiseTech AWSを学びたい人におすすめ!卒業後も徹底したサポートあり 評判を見る 公式サイト
デイトラ 格安でWeb制作やPythonのスキルを習得できる! 評判を見る 公式サイト
ウズカレIT 完全無料で学習からエンジニア就職支援まで一気通貫! 評判を見る 公式サイト
DMM WEBCAMP 受講コースの豊富さは随一!学びたいスキルが定まっていない人におすすめ 評判を見る 公式サイト
.Pro 高いPythonスキルが手に入る!渋谷にある少人数制の対面型スクール 評判を見る 公式サイト
CodeCamp 上場企業の子会社が運営!朝7時~夜23時40分までレッスン可能 評判を見る 公式サイト