python学習⑤|不変のデーターTuple(タプル)

python学習⑤|不変のデーターTuple(タプル)

前回ご紹介した「リスト」と似た目的で使われる「タプル」という命令文があります。

「リスト」と「タプル」の様な命令文は、「オブジェクト」と呼ばれます。

「リスト」と違うところは、リストは作成した後でも、要素の削除・追加が可能でしたが、「タプル」の場合は、要素の操作を一切受け付けません。「タプル」の要素を削除・追加する場合は「タプル」の要素を直接書き換えるしか方法がありません。

「リスト」の事をミュータブルオブジェクト (可変可能なオブジェクト)といい

「タプル」の事をイミュータブルオブジェクト(不変のオブジェクト)といいます。

似たような「オブジェクト」でも、分けられているからには何か使用目的に違いがあるのでしょう。

主な使用目的

「リスト」

「リスト」は主に可変的なもの、例えばですが、スポーツジムの会員名簿を管理するシステムを作成する場合「リスト」と「タプル」だと、どちらを使用するのが適切でしょうか?

「タプル」を使用した場合だと会員様の退会・入会の度にファイルを開き対象の「タプル」を見つけ会員様の名前を探して削除・追加をしなければなりません。

あるいは、在庫管理のシステムを作成する場合でも廃番になった品番や新規の品番が発生する度に開いて見つけて探して削除・追加という作業が行われるのでは、ひどく労力を必要とします。会員数や品番数が数十件くらいであれば可能かもしれませんが、数百、数千となると、気が遠くなります。

上記の様な場合だと後から、メソッドで変更ができる「リスト」の方が適切と言えますよね。

「タプル」

では「タプル」はどのような場面で使用されるのでしょうか?

「タプル」はイミュータブルオブジェクト(不変のオブジェクト)ですので、余程の事がない限り変わらない物に使用されます。例えば、スポーツジムの会員名簿を管理するシステムですと、会員名は「リスト」の方がいいのではないかと申し上げましたが、会員名簿の中の生年月日の「誕生月」などは多分もう増えることも減ることもないと思います。生年月日から割り出される「干支」や「星座」等も、今後増減の見込みはないですよね。もちろん血液型も今後新種が発見されることも無いでしょう(笑)

また最近では、複数の人間で共同で一つのシステムを作り上げるといった開発方法もあります。そういった場合にこれは、追加や削除されたくないものですよって伝えるためにも使用することがある様です。最終的には、自分の好みで使用する場面を選択する事になると思いますが、それぞれの特性を理解したうえで選択するようにしましょう。

「タプル」の使用方法

タプルの使用方法はいたって簡単です。「リスト」は”[” “]”の[ ]内に要素を”,”区切りで記述しましたが「タプル」は”(” “)”( )内に”,”区切りで記述するだけです。それでは実際にやってみましょう。前回使用したコードですが、「bloodtype」という「変数」に”文字列”の”A型”,”B型”,”O型”,”AB型”を「リスト」として代入しています。その「リスト」に新発見された”X型”を追加しようとしています

[list_append.py]を実行してみましょう。

#list_append.py
bloodtype = ["A型","B型","O型","AB型"]
bloodtype.append("X型")
print(bloodtype)

実行結果は”X型”追加されてますね。

これを「タプル」で実行すると[blodtypetuple.py]を実行してみましょう。

#blodtypetuple.py
bloodtype =("A型","B型","O型","AB型")
bloodtype.append("X型")
print(bloodtype)

「AttributeError: ‘tuple’ object has no attribute ‘append’」タプルにappendメソッドは使えませんって意味のエラーが出ます。

まとめ

「リスト」と「タプル」は似たような結果を出しますが、使用目的に応じて、使い訳が必要になってきます。それぞれの特性を理解して使用する場面を選択しましょう。