見出し画像

Python ミュータブルとイミュータブル

今日は前回まとめた時に出てきた、ミュータブルとイミュータブルについて、だいぶ軽くしか触れていなかったのでもう少し詳しくまとめて行こうと思います!

まず、前回はミュータブルは可変的な物でイミュータブルは負変的な物とざっくり説明をしました。
ミュータブルについてはそんなに捕捉をすることはないので、イミュータブルについてです!!!

前回はイミュータブルについては変更できない物と書きましたが、それだけでは、少し説明不足になってしまうんですよね!
個人的には、今リストとかタプルを使っている時点で正直、今までの解釈で不便を感じたりしたことは無いのですが、この考え方自体他の言語でも使う物なのできちんと理解すると、理解が深まるのかもしれないのできちんと理解しましょう!という事で書いていきます

イミュータブルは変更不可となっているのは「同じオブジェクト」において値を変えることが出来ないので、オブジェクトごと変更することで変更をすることは出来ます。
因みに、オブジェクトとは、タプルやリストなどのコンテナのようにインデックス値を割り振りまとめている物の事を言います。

具体的には

 #イミュータブル (タプル)
tpl = (1,2,3,4,5,6)
tpl[2] = 2

ミュータブルのリストでは、こんな感じで、インデックス値の2の”3”を”2”に変えることが出来ますが
イミュータブルでは、エラーを出力してしまいます。
.appendを使った時も同じようにエラーを返します。

オブジェクトが変わったかどうかを判断するためにはID番号を確認することで出来ます!IDは id(タプル名)で調べることが出来ます。 
ミュータブルの値を変更したりする場合は代入文を使う場合はIDは変わるので、ミュータブルは変更することが出来ないということでしたがオブジェクトを変えることで中身を変えることが出来ます

なので、オブジェクトを変更することで実質、変更することが出来ているのと同じになります。
ですが、オブジェクトは違うものになっているので、同じオブジェクトとしては追加や変更をすることが出来ないという事になります!

因みに代入文は

tpl = tpl + (5,)

こんな感じです!!

これの出力は

1,2,3,4,5,6,5

となります!

では、ありがとうございました!

この記事が気に入ったらサポートをしてみませんか?