Pythonの学習を進める中で、複数のデータをまとめて管理する方法として出会うのがリストとタプルです。
角括弧([])を用いるリストと、丸括弧(())を用いるタプルは、どちらも複数の要素を並べて格納できるので、一見よく似ています。
そのため、「これ、使い分ける意味あるの?」と、使い分けに迷われた方も多いのではないでしょうか?
この2つの根本的な違いは、作成後に中身の要素を変更できるかどうかにあります。
この性質の違いを理解し適切に使い分けることで、プログラムの不具合を未然に防ぎ、より安全で効率的なコードを構築できるようになります!
変更可能なリストと固定化されたタプルの根本的な違い
リストとタプルの最大の違いは、ミュータブル(可変性)かイミュータブル(不変性)かという点に集約されます。
- リスト: 中身の要素を自由に追加、削除、変更できます(ミュータブル)。
- タプル: 一度作成した要素を変更、追加、削除することはできません(イミュータブル)。
日常のツールに例えた特徴の理解
リストは、自由に書き込みや消去ができるホワイトボードのような存在です。
業務における本日のToDoリストのように、タスクが完了したら削除し、新たな業務が発生したら追記していくような、動的に変化するデータの扱いに適しています。
一方のタプルは、印刷後にラミネート加工された掲示板のポスターのような存在です。
消費税率のテーブルや都道府県の一覧、固定の設定値のように、プログラムの実行中に勝手に値が書き換わってはいけないマスタデータを保護する役割を果たします。
万が一、誤って値を上書きしようとするコードを実行しても、Pythonが例外(エラー)を発生させて処理を停止するため、意図しないデータ破損を防いでくれます。
メモリ消費量と処理効率の優位性
安全性の向上に加えて、タプルにはリソース効率の面でも大きなメリットがあります。
タプルは要素の変更を想定していないため、Python内部で余計なメモリ領域を確保する必要がありません。
そのため、同じ要素数を持つリストと比較してメモリ消費量が小さく、ループ処理などにおける実行速度も高速になります。
大量の定数データや参照専用のテーブルを扱う場合、タプルを採用することでシステム全体の負荷軽減が可能となります!
実践的な検証コードによる挙動とデータ容量の比較
それでは、実際にPythonコードを用いて、要素変更時の挙動の違いとメモリサイズの差異を確認してみましょう。
import sys
# 1. リストの検証(要素の変更が可能)
todo_list = ["メール返信", "請求書作成", "社内会議"]
print(f"初期のToDoリスト: {todo_list}")
# 最初の要素を変更します
todo_list[0] = "電話対応"
print(f"変更後のToDoリスト: {todo_list}")
# メール返信が正常に電話対応へ更新されます
# 2. タプルの検証(要素の変更が不可)
tax_rates = (0.08, 0.10)
print(f"\n適用消費税率: {tax_rates}")
# 要素の変更を試みます(例外が発生します)
try:
tax_rates[1] = 0.15
except TypeError as error:
print(f"エラー検知: {error}(タプルの要素は変更できません)")
# 3. メモリ消費量の比較
list_numbers = [1, 2, 3, 4, 5]
tuple_numbers = (1, 2, 3, 4, 5)
print(f"\nリストのメモリ容量: {sys.getsizeof(list_numbers)} bytes")
print(f"タプルのメモリ容量: {sys.getsizeof(tuple_numbers)} bytes")
このコードを実行すると、リストの要素は柔軟に書き換わるのに対し、タプルの要素を変更しようとした段階でTypeErrorになり、値の不整合が防がれていることが確認できます。
また、同じ5つの数値を保持している場合でも、タプルのほうが小さなメモリ領域で管理されていることが確認できます。
実務における使い分けの判断基準
では、まとめです。日々の開発や自動化スクリプトの作成においては、以下の基準を目安に選択することをおすすめします。
- 実行中にデータの追加や更新、並び替えが発生する場合、リストを選択
- システムの設定値やマスタデータなど、途中で変更されるべきではない固定データの場合、タプルを選択
最初はすべてリストで実装してもプログラム自体は動作しますが、変更不要なデータ構造をタプルとして定義しておくことで、後からの読み手に対してもこのデータは不変であるという明確な意図を伝えることができます。
ぜひ試してみてください!
Pythonの本は種類が多すぎて、業務効率化に使えるのか見分けるのが大変ですよね。実務自動化に5年以上携わってきた私が、「デスクワークの自動化に即戦力になった本」を厳選して紹介します。失敗しない1冊を見つけたい方は、ぜひ参考にしてみてください。

コメント