を比較するとエディタから警告my_var == Noneが表示されますが、 を使用すると警告が表示されませんmy_var is None。  
私は Python シェルでテストを行い、両方とも有効な構文であると判断しましたが、エディターはそれが望ましいと言っているようmy_var is Noneです。
これは事実ですか? もしそうなら、それはなぜですか?
を比較するとエディタから警告my_var == Noneが表示されますが、 を使用すると警告が表示されませんmy_var is None。  
私は Python シェルでテストを行い、両方とも有効な構文であると判断しましたが、エディターはそれが望ましいと言っているようmy_var is Noneです。
これは事実ですか? もしそうなら、それはなぜですか?
isオブジェクトの同一性を確認する場合に使用します(例: が であるかどうかを確認するvar) None。等しい==かどうかを確認したい場合に使用します(例: Is equal to ?)。var3
my_var == Noneが返されるカスタムクラスを持つことができますTrue
例えば:
class Negator(object):
    def __eq__(self,other):
        return not other
thing = Negator()
print thing == None    #True
print thing is None    #False
isオブジェクトIDをチェックします。object は 1 つしかないNoneため、実行するときはmy_var is None、それらが実際に同じオブジェクトであるかどうかを確認しています (同等のオブジェクトだけではありません) 。
言い換えると、==は (オブジェクトごとに定義される) 等価性のチェックであり、 はisオブジェクトの同一性をチェックします。
lst = [1,2,3]
lst == lst[:]  # This is True since the lists are "equivalent"
lst is lst[:]  # This is False since they're actually different objects
isNone通常、任意のオブジェクトをシングルトンなどと比較する場合は、より高速で予測可能であるため、好まれます。is常にオブジェクト ID で比較しますが、何==が行われるかは、オペランドの正確な型とその順序によって異なります。
この推奨事項はPEP 8でサポートされており、「 None のようなシングルトンとの比較は常にorで行うべきであり、等値演算子では決して行わないでください」と明示的に述べられています。isis not
PEP 8 は、isシングルトンを比較するときに演算子を使用する方が良いと定義しています。