ray88’s diary

お仕事で困ったとき用の自分用の覚書

Python タプルを比較する

python 目次 - ray88’s diary
■2つのタプルの比較
 ・値の比較:== 演算子を使用
 ・オブジェクトの比較:Is 演算子を使用
■サンプルコード
※オブジェクトを比較する際、リストの場合とは相違し、Trueが返る
Python リストを比較する - ray88’s diary

# タプルを設定
a = (1,2,3)
b = a
c = (1,2,3)
print("a:",a)
print("b:",b)
print("c:",c)
#値が同じ
print("a=b:",a==b)
#オブジェクトが同じ
print("a is b:",a is b)
#値が同じ
print("a==c:",a == c)
#オブジェクトはリストの場合とは違いTrueで出力される
print("a is c:",a is c)
a = (4,5,6)

【注意】
オブジェクトには一度作成したあとで変更することができるもの( mutable といいます)と、
一度作成すると変更できないもの( immutable )があります。

数値や文字列、タプルは変更できないオブジェクトです。リストや辞書は変更できるオブジェクトです。

なぜリストは同じ値を持つオブジェクトを 2 つ作った時にそれぞれオブジェクトが異なるのに文字列では
同じ値を持つオブジェクトを 2 つ作った時に同じオブジェクトになるのかというと、
変更できるオブジェクトの場合は値が同じでも必ずオブジェクト毎に異なるオブジェクトとなりますが、
変更できないオブジェクトの場合は同じデータ型で同じ値のオブジェクトが既に存在した場合は
新しいオブジェクトを作成せずに既にあるオブジェクトを参照する場合があるためです。

注意が必要なのは immutable のオブジェクトは必ず別々のオブジェクトが作成されるのに対して、
mutable のオブジェクトは同じ値のオブジェクトを作成した時に同じオブジェクトを参照する場合もあるし
しない場合もあるということです。必ず同じオブジェクトになるという前提でコードを記述するのはお勧めできません。

■参考
Python | オブジェクトが同一かどうかの比較する(== 演算子と is 演算子の違い)