Python ベストプラクティス "is"

@asya_aoi1049 on Tue Jan 08 2019
2.0 min

目次

前提

  • Python 3を使います
  • CPythonを想定しています

is はオブジェクトの比較で使うべし

Pythonでは、 if x is y や if x == y と書くことがあります。
その際に、isと==で迷ってしまう場合があります。
そこで、isと==の違いを以下にまとめました。
isはオブジェクトの比較を行う(同一のオブジェクトかどうか)
==は値の比較を行う(同一の値かどうか)
※厳密には、オブジェクトの比較ではなく、「アドレスの比較」となります。

ユースケース(isを使う場合)

x = <object A>

を定義していて、

if x is <object A>:

という条件式を書きたい場合が該当します。

もちろん、True/False比較のために

x = True

を定義して、

if x is True:

と書くことは、間違いではありませんが、この場合に関してはpythonic的に

if x:

と書くのが良いです。

→なぜ、 x is Trueでも問題ないかというと、boolクラスのTrue/Falseは、常にひとつだけしか存在しないように設計されているためです。
The values False and True will be singletons, like None.
引用元
PEP285

ユースケース(==を使う場合)

x = 1234

を定義していて、

if x == 1234:

という条件式を書きたい場合が該当します。

まとめ

is と == を混同せずに、しっかりと使い分けましょう。

日別に記事を見る