Ответ 1
Резюме:
Используйте is
, если вы хотите проверить идентичность объекта (например, проверить, есть ли var
None
). Используйте ==
, если вы хотите проверить равенство (например, Is 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