Résumé :
Utilice is
lorsque vous souhaitez vérifier la validité de l'objet. identité (par exemple, en vérifiant si var
es None
). Utilisez ==
lorsque vous voulez vérifier égalité (par exemple, est-ce que var
égal à 3
?).
Explication :
Vous pouvez avoir des classes personnalisées où my_var == None
retournera True
par exemple
class Negator(object):
def __eq__(self,other):
return not other
thing = Negator()
print thing == None #True
print thing is None #False
is
vérifie l'objet identité . Il n'y a qu'un seul objet None
donc quand vous le faites my_var is None
vous vérifiez s'il s'agit bien du même objet (et pas seulement de l'objet équivalent objets)
En d'autres termes, ==
est une vérification de l'équivalence (qui est définie d'un objet à l'autre) alors que is
vérifie l'identité de l'objet :
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
8 votes
PEP 8 indique quelque part que vous devez comparer aux singletons en utilisant
is
- python.org/dev/peps/pep-0008/#programming-recommendations2 votes
Ce poster parle de Python 3, et ma question concerne Python 2.x. Je ne suis pas sûr que ce soit une différence assez importante pour justifier les deux restants, mais j'ai édité la question pour l'inclure juste au cas où.
4 votes
Je ne pense pas que cette question soit vraiment un doublon. L'autre portait sur == vs is en général, celle-ci porte sur None en particulier.