Noneの判定に == ではなく isを使う理由
def func(arg1, arg2 = None): if arg2 is None: arg2 =[] arg2.append(arg1) print(arg2)
空リストを初期化したい場合はデフォルト値にNoneを使って判別するが、なぜNoneの判定に==ではなくisを使うのだろうか?
同値性と同一性
==はオブジェクト同士が同値性(等価)であるかどうかを判定する演算子で、isはオブジェクト同士が他のオブジェクトと重複することがない(同一性)ことを保持する。
同じ値かどうかを(同値性)判定する==
Pythonの==は同じ値かどうか(同値性)を判定する。
test_list_1 = [1, 2, 3] test_list_2 = [1, 2, 3] print(test_list_1 == test_list_2) #True
==は同じ値で同じ順番(同値)だとTrueになる。
同一性を判定するis
Pythonのisは完全に同じものかどうかを判定する。
test_list_1 = [1, 2, 3] test_list_2 = [1, 2, 3] #オブジェクトの識別値を調べる print(id(test_list_1)) #4394587336 print(id(test_list_2)) #4389782536 print(test_list_1 is test_list_2) #False print(test_list_1 is test_list1) #True
Noneはどちらを使うのがいいのか?
オブジェクトがNoneであるのかを判定するには、値が確実にNoneなのか違うのかを判別するためするためisを使う。
コメント