Резюме:
Используйте, 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