devterview_$ iniciar simulação

`is` x `==` e o cache de inteiros pequenos

FácilJúniorModelo de objetos

Pergunta

Qual a diferença entre `is` e `==` em Python, e por que `a is b` às vezes dá `True` pra números pequenos e `False` pra grandes?

Resposta esperada

`==` compara VALOR (chama `__eq__`); `is` compara IDENTIDADE (é o mesmo objeto na memória, mesmo `id()`). Você usa `is` só pra singletons: `x is None`, `x is True/False`, comparação de sentinelas. A pegadinha: CPython faz cache de inteiros pequenos (de -5 a 256) e de algumas strings 'internadas' — então `a = 100; b = 100; a is b` costuma dar `True` porque os dois nomes apontam pro MESMO objeto cacheado; com `a = 1000; b = 1000`, cada literal cria um objeto novo e `a is b` dá `False`. Isso é detalhe de implementação, não garantia da linguagem — nunca dependa dele. A regra: valor → `==`; identidade real (None, mesma instância) → `is`.

Por que perguntam isso

Pergunta júnior/pleno de Python. O experimento com 256 vs 257 é o teste clássico. Sinal bom: 'detalhe de implementação, não dependa'.

#is#eq#identidade#int-cache
publicidade

Perguntas de acompanhamento

Relacionadas