はじめに
今回は、is演算子、==演算子について基本から解説します。Pythonには「同じであるか」を判定する演算子として「is」演算子と「==」演算子があります。この2つの演算子の違いがわかりますか?それぞれの演算子が何を判定するのかを基本から解説します。
同じであるかを判定する
「==」演算子
「==」演算子は同値判定をします。つまり「値」が同じであるかを判定する演算子です。少し例をみてみましょう。
list_a = [1,2]
list_b = [1,2]
# リストの比較(==演算子)
a == b
これはイメージ通りの結果ですね。文字列についても確認しておきましょう。
string_a = 'らくだ'
string_b = 'らくだ'
# 文字列の比較(==演算子)
string_a == string_b
こちらも予想通りの結果ですね。このように「==」演算子は値が同じであるかどうかを判定します。
# リストの比較(is演算子)
list_a is list_b
「is」演算子
「is」演算子は同一オブジェクトを判定します。つまり「オブジェクト」が同一であるかを判定する演算子です。
先ほど作った、list_a, list_bを比較してみましょう。
今度はFalseとなります。list_a = [1,2], list_b = [1,2]であっても、別オブジェクトなので同じではない(False)となります。次にlist_c = list_aとしてこれを比較してみましょう。
list_c = list_a
# リストの比較
list_a is list_c
これはTrueとなります。「is」演算子による比較ではオブジェクト名が同じであるかではなく、実体が同じであるかどうかを比較しています。「実体」はid()で確認することができます。list_a, list_b, list_cのidを確認してみましょう。
# idの確認
print('list_aのidは{}です'.format(id(list_a)))
print('list_bのidは{}です'.format(id(list_b)))
print('list_cのidは{}です'.format(id(list_c)))
idをみるとlist_aとlist_bは異なっています。一方、list_aとlist_cは同じです。なので、先ほどの結果となるのです。
文字列についても見ておきましょう。
# 文字列の比較(is演算子)
string_a is string_b
もうわかりますね。これはFalseになります。リストの場合と同じことをやってみましょう。
string_c = string_a
# 文字列の比較
string_a is string_c
idを確認しておきましょう。
# idの確認
print('string_aのidは{}です'.format(id(string_a)))
print('string_bのidは{}です'.format(id(string_b)))
print('string_cのidは{}です'.format(id(string_c)))
このようにstring_aとstring_bはidが異なり、string_aとstring_cはidが同じとなっていますね。なので、「is」演算子による比較結果がstring_aとstring_bではFalse、string_aとstring_chではTrueとなります。
Noneの判定
オブジェクトがNoneであるかを判定したいときがあります。Noneはそれ自体が何もない状態を表すオブジェクトです。オブジェクトの比較なのでis演算子を使いましょう。
まとめ
今回は「==」演算子と「is」演算子を扱いました。同じような意味をもつ演算子ですが、比較の内容が違いましたね。以下にまとめておきます。
コメント