dackdive's blog

新米webエンジニアによる技術ブログ。JavaScript(React), Salesforce, Python など

[python]"is"と"=="の違い

こちらの記事を読むと、

  • isはメモリ上の同じアドレスに存在する同一のものかどうかの比較
  • ==は単に値が同じかどうかの比較

ということがわかった。

>>> a = 'a'
>>> b = 'b'
>>> c = 'b'
>>> a is b
False
>>> b is c
True

文字列や数値などのプリミティブ型はisで比較しても==で比較してもよいが

>>> [1,2,3] == [1,2,3]
True
>>> [1,2,3] is [1,2,3]
False

>>> (1,2,3) == (1,2,3)
True
>>> (1,2,3) is (1,2,3)
False

リストやタプルはそうはいかないぞと。

おまけ

ここまで聞いて、Javaequals==に似てるなーっと思ったら
こんな記事もあった。

Pythonのis演算子と==演算子の違い - logging.info(self)

Javaはequals()で同値比較、==でインスンタンス同一のチェックなのでJava知ってる人には逆ですよーというとわかり易いんだろうか。

そっか。同じ概念だけど逆なのか、と納得。