HZK
@HZK (Ritoku Sakamae)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Python:タプルの要素がリストの時は、変更可能?

解決したいこと

Pythonのタプル(tuple)はイミュータブル(更新不可)なシーケンスで、要素を変更したり削除したりすることはできないと学びました。
しかし、以下のように要素がリストの場合は、変更可能のようにも見えます。

これは、タプルにみえる何かなのか、それともタプルの例外的な措置なのでしょうか? この現象について、プログラミング的にどのように理解したら良いのでしょうか、ご教授お願いします。

該当するソースコード

#タプルの要素にリストを使う。
mixes1 = (3, ["こんにちは"], ["True"], 0.314) 

#変更可能となる
mixes1[1][0] ="さようなら"
mixes1[2][0] ="False"
print(mixes1)

#以下だとTypeErrorとなる
#mixes1[2]="False" 

#削除もできる
mixes1[2][0] =""
print(mixes1)

###出力結果
(3, ['さようなら'], ['False'], 0.314)
(3, ['さようなら'], [''], 0.314)

1

1Answer

タプルの各要素は別のオブジェクトを参照しているだけです。
タプル自身の要素の追加や変更はできませんが、タプルから参照しているオブジェクトは変更可能です。

Python では、数値や文字列やリストなどのオブジェクトを作ってから、変数やリストやタプルの要素から参照します。
image.png

2Like

Comments

  1. @HZK

    Questioner

    タプルの1次参照は原則どおり変更不可だけど、2次参照はその限りにあらず、と理解しました。
    実際にタプルの要素が辞書の場合も試しましたが、変更可能でした。とても分かりやすい解説、感謝致します。

Your answer might help someone💌