Resumo:
Use is
quando quiser verificar a identidade de um objeto (por exemplo, verificar se var
existe None
). Use ==
quando quiser verificar a igualdade (por exemplo, é var
igual a 3
?).
Explicação:
Você pode ter classes personalizadas onde my_var == None
retornaráTrue
por exemplo:
class Negator(object):
def __eq__(self,other):
return not other
thing = Negator()
print thing == None #True
print thing is None #False
is
verifica a identidade do objeto . Há apenas um objeto None
; portanto, quando você faz isso my_var is None
, verifica se eles realmente são o mesmo objeto (não apenas objetos equivalentes )
Em outras palavras, ==
é uma verificação de equivalência (que é definida de objeto para objeto), enquanto is
verifica a identidade do objeto:
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