Pular para o conteúdo

Python - Diferença entre == e is

Dica publicada em Python / Miscelânea
Gildásio Júnior gjuniioor
Hits: 7.013 Categoria: Python Subcategoria: Miscelânea
  • Indicar
  • Impressora
  • Denunciar
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Python - Diferença entre == e is

Dica originalmente postada aqui:
Olá, galera, tudo tranquilo?

Estava conversando com um amigo que está estudando Python e tudo mais, e então ele veio com a seguinte dúvida:

- Qual a diferença entre == e is no Python?

Para quem não sabe, no Python tem o operador is que "tem a mesma função" do ==. Veja:

python
>>> x = 10
>>> y = 10
>>> x == y True
>>> x is y
True


Mas...

python
>>> x = 1000
>>> y = 1000
>>> x == y
True
>>> x is y
False


Viu só? Pois bem, o que que acontece então??

O Python tem um mecanismo interessante nesse ponto...

Quando se tratam de coisas pequenas ele utiliza de ponteiros para apontar outros rótulos para um mesmo endereço de memória.

Quando o que é armazenado na variável já começa a crescer, fica maior e tal, ele já não usa disso, para não pesar, mas sim de outro endereço...

Seria um cache que ele faz de alguns tipos de objetos, entre eles estão int e string, por exemplo. Float e dicionário já não são assim.

Para ter uma ideia melhor disso, vamos ver os endereços que as variáveis ocupam e o resultado da comparação:

python
>>> x = 10
>>> y = 10
>>> hex(id(x))
'0x98a1844'
>>> hex(id(y))
'0x98a1844'
>>> x == y
True
>>> x is y
True


Perceba que ele pega o mesmo endereço... Agora, se colocarmos valores maiores:

python
>>> x = 1000
>>> y = 1000
>>> hex(id(x))
'0x98e5520'
>>> hex(id(y))
'0x98e5508'
>>> x == y
True
>>> x is y
False


Ou seja, o is (como a tradução mostra) vai verificar se algo é aquilo a que a comparação está se referindo, ou seja, se são a mesma coisa. Já o == vai analisar se são iguais, assim como o esperado.

Mais algumas demonstrações:

Float:

python
>>> x = 1.0
>>> y = 1.0
>>> x == y
True
>>> x is y
False


Dict:

python
>>> x = [1]
>>> y = [1]
>>> x == y
True
>>> x is y
False


Não há motivo para me aprofundar tanto aqui, é apenas uma dica rápida.

Espero que resolva os problemas de dúvidas de quem necessitar...

Tem mais algum caso como esse? Quer tirar alguma dúvida do tipo? Comenta aí ou entra em contato.

Vlw pessoal, até mais ver!!!

O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

ES File Explorer - App Android

Infográfico: do Mainframe ao Cloud Computing

Habilitando autocomplete para o sudo e man

Palestra: Redes Complexas - Prof. Daniel Figueiredo

Palestra: Computação e Desenvolvimento de Jogos Digitais - Prof. Geraldo Xexéo

TP-1 Engine - motor para criação de jogos

DojoTools

Instalando o IPython com extensão notebook no Linux Mint e Ubuntu

Reproduzindo vídeos em modo texto no Linux

Crie o seu jogo roguelike em Python

#1 Comentário enviado por hgalvao em 23/11/2015 - 17:24h

Muito legal, não acreditei, fui testar rsrs.

Contribuir com comentário

Entre na sua conta para comentar.