Python: Diferença entre `is` e `==` (Identidade vs Igualdade)

Publicado:
Atualizado:
PorJeferson Peter
2 min de leitura
Python
Compartilhe este post:

Quem está aprendendo Python muitas vezes se pergunta: qual é a diferença entre is e ==? À primeira vista, parece que ambos fazem a mesma coisa — mas não fazem. Enquanto == verifica se dois valores são iguais, is verifica 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 is ao verificar identidade, especialmente com None:

    if resultado is None:
        print("Nenhum valor retornado")
    
  • ❌ Não confie em is para 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.

Compartilhe este post: