ray88’s diary

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

Python リストを比較する

python 目次 - ray88’s diary
■同じ値かどうか比較する
 値の比較には == 演算子を使用する

#リストを設定
List_a = ["green","blue","red"]
List_b = ["green","blue","red"]
List_c = ["green","red","blue"]
# List_a と List_b を比較
print(" List_a と List_b を比較")
print(List_a == List_b)
# List_b と List_c を比較
print(" List_b と List_c を比較")
print(List_b == List_c)


■変数にリストを代入

#リストを設定
List_a = ["green","blue","red"]
List_b = ["green","blue","red"]

# List_c に List_a を代入
List_c = List_a
print("List_c")
print(List_c)
# List_a に 要素を追加
List_a.append("White")
#List_cには何も代入していないがList_aを参照しているので同じリストになる
print("List_a")
print(List_a)
print(" List_c")
print(List_c)


■変数への代入②

#リストを設定
List_a = ["green","blue","red"]
List_b = ["green","blue","red"]

# List_c に List_a を代入
List_c = List_a
print("List_c")
print(List_c)
# List_a に 要素を追加
List_a.append("White")
#List_cには何も代入していないがList_aを参照しているので同じリストになる
print("List_a")
print(List_a)
print(" List_c")
print(List_c)


※同じリストを参照している変数に別のリストを代入すると演算子が切れる

#リストを設定
List_a = ["green","blue","red"]
List_b = ["green","blue","red"]

# List_c に List_a を代入
List_c = List_a
print("List_c")
print(List_c)
# List_a に 要素を追加
List_a.append("White")
# List_cに別のリストを代入
List_c = [1,2,3]
#List_cには何も代入していないがList_aを参照しているので同じリストになる
print("List_a")
print(List_a)
print(" List_c")
print(List_c)


演算子を使用してリストを比較
 オブジェクトの比較には is 演算子を使用する

演算子 説明
is a is b aとbが同一のオブジェクトクトのときTrue
is not a is not b aとbが同一のオブジェクトはないときTrue
#リストを設定
#リストを設定
List_a = [1,2,3]
# List_b に List_a を代入
list_b = List_a
List_c = [1,2,3]

# List_a と List_b を比較
print("List_a と List_b は同一か?")
print(List_a is list_b)

# List_a と List_c を比較
print("List_a と List_c は同一か?")
print(List_a is List_c)

# List_a と List_c を比較
print("List_a と List_c は相違しているか?")
print(List_a is not List_c)

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

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

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

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

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