はじめに
今回は、Pythonの演算子「==」と「is」の使い分けについて解説します。
Pythonの導入や基本操作が行えることを前提で進めます。
↓前提知識はこちらをご覧ください↓


ちなみに、「!=」と「not is」の違いもこちらの内容で理解できます。
「==」と「is」の違い
「==」と「is」は下記
・「==」 → 値が等しい場合(文字も含む)
・「is」 → オプジェクトIDが等しい場合
この2つが違いです。
オプジェクトIDとは
Pythonは入力した情報、オプジェクトに “ID” という整数の数字が自動で割り当てられます。
これは、オプジェクトのメモリアドレスのようです。(詳細)
↓Int / Float / Str / Listなどの全てのオプジェクトにIDはあります。

IDはメモリーに格納された情報なので、PCやPythonの再起動で値が変わります。
あと、IntのIDはPCを再起動まで変わらないようです。

以上が、オプジェクトIDについての解説です。
値が同じでもオプジェクトIDが変わる場面
同じ値でもオプジェクトが変わる場面があります。
試しにいろんな形で「10」の数字を入力。(通常、小数、int変換、リストから取り出し)

すると、同じ「10」でも下記の2つはIDが違う事が分かります
・Intの「10」
・Floatの「10.0」
このように、IntとFloatの “型” が違うと…
値が同じでもオプジェクトIDが変わります。

以上が、値が同じでもオプジェクトIDが変わる場面
「==」の使い道
「==」は 値が等しい場合にTrueを返す処理です。
つまり「10」と「10.0」はTureになります。

if文は、より踏む混んで解説すると…
「if」以降の内容が「Ture」の時に実行する処理です。
なので、if “以降” の内容が「Ture」だと実行されます。

以上が「==」の使い道です。

値が合ってれば、IntとFloatの違いがあってもOKな場合に使えます。
「is」の使い道
「is」は オプジェクトIDが等しいにTrueを返す処理です。
つまり「10」と「10.0」はFalseになります。

そしてif文は、if “以降” の内容が「Talse」だと実行されません。

そして、このプログラムを動かすと… 警告文(Warning)が表示されます。

【警告文】
Warning (from warnings module):
SyntaxWarning: "is" with 'int' literal. Did you mean "=="?
↓↓↓↓↓
【警告内容の要約】
「int」と「Float」は値が同じでも、IDが違う
なので「is」だと ID が不一致になるので動きません。
たぶん「==」を使った方がいいですよと言う意味。
あと、片側をint()やfloat()で変換して揃えると正しく実行されます。
※ただし、数字を使ったif文を実行すると「==」を使った方が良いですよ警告が出ます。

このように「is」は「ID」の一致も含めた “完全な” 一致を確認する上で役立ちます。
以上が「is」の使い道です。

値が合っていても、IntとFloatの違うと実行させないような場面で使えます。
これの使い道は… 謎。
なので、数字は「==」を使わないとエラーが出る。
それ以外は同じと解釈しても良いかもしれません。
まとめ
今回は、Pythonの演算子「==」と「is」の使い分けについて解説しました。
・「==」は値の一致でTureを返す
・「is」はオプジェクトIDの一致でTureを返す
・オプジェクトIDはInt、Float、Str、Listの全てに自動で設定される
・Intの「1」とFloatの「1.0」は値は同じだがオプジェクトIDが変わる
・数字を使ったif文は「==」を使わないと警告文が表示される
また、他にもプログラムについて解説してます。


ぜひ、こちらもご覧ください。
コメント