今までずっとpythonのtupleの存在意義をよく分かってなかったのですが、仕事で使用するケースがあり理解をしたので書き示します。
コンテンツ
タプルとは更新不可、不変な配列!
tuple(タプル)型とは
tuple(タプル)型とはイミュータブル(更新不可)、不変な配列を行う型のことをさします。
タプルはリストに似ていますが、定義後に要素を変更できない点がリストと違います。
つまり更新不可なので、リストのようなappendで要素を追加なんでできませんし、そもそもappendメソッドを使うこともできません。
list(リスト)型とは
list(リスト)型は、リストと呼ばれる可変な配列を扱う型です。後から中身が変化、追加、削除できる型になります。
dict(辞書)型とは
dict(辞書)型は、辞書を扱う型です。語源はその名の通りdictionary(辞書)ですね。
辞書はキーとバリューのセットで扱うデータ型で、他の言語ではハッシュやマップ、連想配列とも呼ばれます。
タプルの使用例
week = ('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday')
print(type(week)) # <class 'tuple'>

week(1週間)は不変な配列なので例題として使用してみました。
mylist = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']
mylist.append("oneday")
print(mylist) # ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'oneday']
以下はtupleを理解した上で少し高度なコードを書いてみました。
問合せ管理画面で、現在の状態を新しい状態に更新した際のコードになります。
そのままコピペで動きます。
class Inquiry():
class InquiryStatus():
Pending = 0
Ignore = 0
Completed = 0
def inquiry_status(current_status, new_status):
RET_KEEP = (True, 'keep status')
RET_DENIED = (False, 'request denied!')
RET_COMPLETED = (True, 'status changed!')
STATUS_CHANGED_DICT = {
Inquiry.InquiryStatus.Pending:{
Inquiry.InquiryStatus.Pending: RET_KEEP,
Inquiry.InquiryStatus.Ignore: RET_DENIED,
Inquiry.InquiryStatus.Completed: RET_COMPLETED,
},
Inquiry.InquiryStatus.Ignore:{
Inquiry.InquiryStatus.Pending: RET_KEEP,
Inquiry.InquiryStatus.Ignore: RET_DENIED,
Inquiry.InquiryStatus.Completed: RET_COMPLETED,
},
Inquiry.InquiryStatus.Completed:{
Inquiry.InquiryStatus.Pending: RET_KEEP,
Inquiry.InquiryStatus.Ignore: RET_DENIED,
Inquiry.InquiryStatus.Completed: RET_COMPLETED,
},
}
(success, msg) = STATUS_CHANGED_DICT[current_status][new_status]
return (success, msg,)
inquiry = Inquiry()
current_status = inquiry.InquiryStatus.Completed
new_status = inquiry.InquiryStatus.Pending
(success, msg,) = inquiry_status(current_status,new_status)
print(success, msg) # True status changed!



