【Python】なぜ、「== None」ではなく「is None」なのか

Python

キーワードは、「同一性と同値性」「シングルトン(Singleton)」です!

None = Python版null ですが、

コーディング規約のデファクトスタンダードになっているPEP8サマは、

「Noneとの比較には is を使うべきで、絶対に等値演算子を使ってはならない」としています。

なぜなんでしょうか。

同一性と同値性

簡単にいうと、

「同一性」は、出所が同じ/同じ実体を参照している

つまるところ、同じインスタンスということです。

 

「同値性」は、論理的/数学的に等しい

その場での判断なので、出自は関係ありません。

シングルトン(Singleton)

シングルトンは、1つのクラスに対して、1つのインスタンスのみを生成する設計のこと

Noneのようなシングルトンと比較する場合は…

そもそも、Noneはシングルトンなので、1つのインスタンスしか存在しえないということです。

Noneとされたものはすべて同じインスタンスなので、「xxx is None」で評価可能になります。

「同一性」で評価できるなら、「同一性」で評価したいところです。

なぜならば、「同値性」の評価は、人為的な定義しだいで変化の余地が多分にあるからです。

たとえば、False == None とか、0 == None が、どのような動作をするかは、若干の不安が残ります。(というか、Qiita上の「早見表」や「チートシート」を見たくなります)

Noneを「同一性」で評価すれば、こんな心配とは無縁です。

ps.

ひとこと感想

今回は、「シングルトン」について調べたのが急流となって、全体がよく分かりました~

コメント