Python | Noneの判定に==ではなくisを使う理由

Python
スポンサーリンク

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を使う。

コメント