GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Qual não entendi bem a diferença entre os operadores '==' e 'is'

ola, amigos!

estou lendo a apostila da caelum: Python e Orientaçao A Objetos
veja esse trecho da apostila:
Sem%20t%C3%ADtulo

o exemplo acima, retorna falso quando usamos o operador ‘is’ e, verdadeiro com o operador ‘==’.

Digamos que eu escreva o seguinte codigo…
a = ‘Thiago’
b = ‘Thiago’
a is b

Por que o operador ‘is’ retorna ‘True’? ‘a’ nao é um objeto e ‘b’ outro objeto?

Acontece que literais de strings são cacheados pra ocupar menos espaço na memória. É um detalhe de implementação. Outras linguagens fazem isso também, tipo Java. Um outro ponto interessante é que, dependendo do interpretador que você tá usando, só strings com caracteres alfanuméricos e underline são cacheados. Se quiser testar, coloca uma exclamação na string e vê se ainda retorna True

Antes de criar um novo objeto pra segunda string, o interpretador vê se já existe alguma string igual criada anteriormente. Se tiver, ele usa o mesmo objeto. É por isso que o is retorna True.

>>> a = '#!@#!#%@#%'
>>> b = '#!@#!#%@#%'
>>> a is b
False
1 Curtida

isso parece um pouco avançado pra mim… haha. ainda estou aprendendo programação. obrigado

//