タプル型
タプル型はデータの集合を1列に並べて管理するデータ構造である。
リスト型と同様に要素の集合を1列に並べて管理する。また、添字と呼ばれる整数値を用いて、アクセス対象を指定する。 リスト型とは異なり、生成後は要素の追加や削除、値の変更などはできない。この性質をイミュータブルという。 主な生成方法:
丸括弧の利用
タプル型のインスタンスは丸括弧の中に要素を列挙することにより生成することができる。
code:tuple1.py
a = (1, 2) # 要素数2の場合
print(a, len(a), type(a))
b = 2, 3.14, 'moji' # このような要素の列挙もタプルが生成される
print(b, len(b), type(b))
c = (1, ) # 要素数1の場合
print(c, len(c), type(c))
要素数が1個の場合には、「演算の優先順位」を意味する丸括弧と区別するためにカンマを明示する。
カンマ無しで次のように記述したとする。
code:演算の優先順位
c = (1)
これは
code:続き
c = (1 + 2)*3
で使われるような「優先順位を指定する演算子」としてのカッコ記号として解釈されてしまう。
code:(tuple1.py)の続き.py
d = (a, 3, b, 4) # 入れ子の例
print(d, len(d), type(d))
要素の参照
添字とよばれる整数値を用いてアクセス対象を指定する。
code:(続き).py
print(x)
入れ子構造のリストへアクセスするためには、上位のリストから下位のリストに向かって、順に添字を用いて要素の決定を行う。上の例を分かり易く記述すると、
code:(抜粋).py
の丸カッコ内が先に評価される。結果として最初の添字「2」により変数 b が指すリストがアクセスされ、更に、次の添字「0」により最終的なアクセス対象が決定される。
留意事項
ひとたび生成されたタプルオブジェクトの値を変更することはできない。
code:tuple2.py
a = (1, 2, 3)
誤解の無いように解説するが、新たなインスタンスへの割り当てなおし(変数の上書きに相当)は可能である。
code:tuple3.py
a = (1, 2, 3) # (1)
a = (5, 6) # (2) 新たなタプルを生成し、変数はそちらに割り当てなおされる
print(a)
a = 'hoge' # (3) 変数aはいかなる型のインスタンスでも指すことができる
print(a)
この例の場合、
(1)で生成した「(1, 2 ,3)」インスタンスは(2)の代入の結果参照されなくなるためメモリから削除される。
(2)で生成した「(5, 6)」インスタンスは(3)の代入の結果参照されなくなるためメモリから削除される。
https://scrapbox.io/files/650186562c3d64001cd1a827.png