Que bagunça é essa?

Que bagunça é essa?

por José Coelho de Pina -
Número de respostas: 2

Salve,

Por favor, alguém sabe me explicar o que está acontecendo nos trechos de código abaixo?
O que faz esse tal de is? É a mesma coisa que ==? Se não é, qual a diferença?

Python 3.6.1 (default, Mar 22 2017, 06:17:05) 
[GCC 6.3.0 20170321] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> i = 1
>>> j = 1
>>> x = 1.0
>>> i == j
True
>>> i == x
True
>>> i is j
True
>>> i is x
False
>>> i is int
False
>>> x is float
False
>>> 


Python 3.6.1 (default, Mar 22 2017, 06:17:05) 
[GCC 6.3.0 20170321] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> s1 = "abc"
>>> s2 = "abc"
>>> s3 = s1
>>> s1 == s2
True
>>> s1 == s3
True
>>> s2 == s1
True
>>> s1 is s2
True
>>> s1 is s3
True
>>> s2 is s3
True
>>>


Python 3.6.1 (default, Mar 22 2017, 06:17:05) 
[GCC 6.3.0 20170321] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> lista1 = [11, -22, 3.14, "oi"]
>>> lista2 = [11, -22, 3.14, "oi"]
>>> lista3 = lista1
>>> lista1 == lista2
True
>>> lista1 == lista3
True
>>> lista2 == lista3
True
>>> lista1 is lista2
False
>>> lista1 is lista3
True
>>> lista2 is lista3
False
>>> 

Em resposta à José Coelho de Pina

Re: Que bagunça é essa?

por Nivaldo da Silva Melo Neto -

Pelo que eu entendi o is testa se os objetos são o mesmo na memória, não necessariamente seu valor. Por isso quando você cria clones o is retorna true... (Só não entendi a parte do x is int e x is float)

Em resposta à Nivaldo da Silva Melo Neto

Re: Que bagunça é essa?

por Pedro T. R. Pinheiro -

Parece ser bem isso, mesmo... O is compara os objetos do ponto de vista do Python olhando para a memória. Se eles tiverem o mesmo tipo, mesmo conteúdo etc. são iguais enquanto objetos. O ==, por sua vez, invoca o método de comparação especificado pelo objeto, o __equals_to__ (ou algo assim, sei lá).