kuji を リスト定義(角かっこ []) にした場合と、タプル定義(丸かっこ ()) にした場合で、プログラムを実行した際の結論から言うと、動作結果(出力)に違いはありません。
どちらを使っても、
random.choice() は要素の中からランダムに1つを正しく選んで表示します。Python
# リスト定義
kuji = ["大吉", "中吉", "小吉", "凶"]
# タプル定義
kuji = ("大吉", "中吉", "小吉", "凶")
ただし、Pythonの言語仕様や内部の仕組みとしていくつかの性質の違いがあります。
主な違い一覧
| 比較項目 | リスト [...] | タプル (...) |
| 要素の変更(追加・削除など) | 可能(可変 / Mutable) | 不可(不変 / Immutable) |
| メモリ使用量・処理速度 | タプルよりわずかに大きい | リストよりわずかに軽量・高速 |
| 用途の作法・設計思想 | 途中で中身が変わるデータ向け | 変更しない固定データ向け |
具体的な違いの解説
1. 中身を変更できるかどうか(一番の違い)
- リスト: 途中で要素を追加(
append)したり変更したりできます。Pythonkuji = ["大吉", "中吉", "小吉", "凶"] kuji.append("大凶") # 途中で「大凶」を追加できる - タプル: 一度定義すると中身の変更や追加ができません。Python
kuji = ("大吉", "中吉", "小吉", "凶") # kuji.append("大凶") -> エラー(AttributeError)になります
2. コードの意図・安全性の違い
今回のような「おみくじの選択肢(大吉、中吉、小吉、凶)」のように、プログラムの途中で中身が変わらない固定データの場合、タプルを使うことで「誤って途中で書き換えられるリスク」を防ぐことができます。
3. メモリと速度の違い
内部的にもタプルの方がシンプル構造であるため、リストよりも僅かにメモリ使用量が少なく、処理が高速です(ただし、おみくじ程度の規模であれば体感できる差はありません)。
まとめ:どちらを使うべき?
- 基本はどちらでもOK(今回のような単純な
random.choice()であれば全く同じように動作します)。 - 「途中で要素を追加・書き換える予定がない固定データ」 であれば、書き換え防止の意味も込めて タプル
()を使うのがPythonプログラミングの作法として好まれることがあります。