Резюме:
Используйте, is
когда вы хотите проверить идентичность объекта (например, проверить, если var
есть None
). Используйте, ==
когда вы хотите проверить равенство (например, var
равно 3
?).
Объяснение:
Вы можете иметь пользовательские классы, где 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
проверяет идентичность объекта . Существует только 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
is
- python.org/dev/peps/pep-0008/#programming-recommendations