Python: Diferença entre `is` e `==` (Identidade vs Igualdade)
Quem está aprendendo Python muitas vezes se pergunta: qual é a diferença entre
ise==? À primeira vista, parece que ambos fazem a mesma coisa — mas não fazem. Enquanto==verifica se dois valores são iguais,isverifica se duas variáveis apontam para o mesmo objeto na memória. Vamos explorar essa diferença com exemplos práticos.
Diferença entre is e == no Python
a = [1, 2, 3]
b = [1, 2, 3]
print(a == b) # valores iguais?
print(a is b) # mesmo objeto?
# True
# False
✔ a == b → retorna True porque ambas as listas têm os mesmos valores.
✘ a is b → retorna False porque são dois objetos diferentes, mesmo que seus conteúdos sejam idênticos.
Quando duas variáveis apontam para o mesmo objeto
a = [1, 2]
b = a # b aponta para a mesma lista que a
print(a is b)
# True
Aqui, b é apenas outra referência para o mesmo objeto na memória.
Por isso a is b retorna True.
Pegadinha: inteiros pequenos e strings podem ser cacheados
O Python às vezes reutiliza objetos (chamado interning). Isso significa que duas variáveis podem apontar para o mesmo objeto, mesmo que pareçam valores separados.
x = 256
y = 256
print(x is y) # muitas vezes True
x = 257
y = 257
print(x is y) # pode ser False
Inteiros entre -5 e 256 geralmente são cacheados, então is pode retornar True inesperadamente.
O mesmo pode acontecer com strings:
s1 = "hello"
s2 = "hello"
print(s1 is s2) # muitas vezes True devido ao interning
Por isso confiar em is para comparar valores é arriscado.
Boas práticas: quando usar is vs ==
-
✅ Use
==ao comparar valores:if entrada == "sim": print("Confirmado!") -
✅ Use
isao verificar identidade, especialmente comNone:if resultado is None: print("Nenhum valor retornado") -
❌ Não confie em
ispara inteiros ou strings — o cache pode enganar.
Conclusão
Em resumo:
==→ compara valores.is→ compara identidade (mesmo objeto na memória).
Na prática, você usará == na maior parte do tempo.
Reserve is para casos específicos, como checar se algo é None.
Isso deixa seu código mais legível, previsível e profissional.