こちらの記事を読むと、
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
リストやタプルはそうはいかないぞと。
おまけ
ここまで聞いて、Javaのequals
と==
に似てるなーっと思ったら
こんな記事もあった。
Pythonのis演算子と==演算子の違い - logging.info(self)
Javaはequals()で同値比較、==でインスンタンス同一のチェックなのでJava知ってる人には逆ですよーというとわかり易いんだろうか。
そっか。同じ概念だけど逆なのか、と納得。