Resumo:
Use isquando quiser verificar a identidade de um objeto (por exemplo, verificar se varexiste None). Use ==quando quiser verificar a igualdade (por exemplo, é varigual a 3?).
Explicação:
Você pode ter classes personalizadas onde my_var == NoneretornaráTrue
por exemplo:
class Negator(object):
def __eq__(self,other):
return not other
thing = Negator()
print thing == None #True
print thing is None #False
isverifica 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 isverifica 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