Qual é a diferença entre “é” e “==” em python? [duplicado]
Pergunta
Duplicate possíveis:
Python '==' vs 'é' cordas comparando, 'é 'falhar algumas vezes, por quê?
é
a == b
o mesmo que
a is b
?
Se não, qual é a diferença?
Edit: Por que o
a = 1
a is 1
retornar True, mas
a = 100.5
a is 100.5
retornar falso?
Solução
Não, estes não são os mesmos. is
é um cheque de identidade de objeto - ou seja, verificar se a
e b
são exatamente o mesmo objeto. Exemplo:
a = 100.5
a is 100.5 # => False
a == 100.5 # => True
a = [1,2,3]
b = [1,2,3]
a == b # => True
a is b # => False
a = b
a == b # => True
a is b # => True, because if we change a, b changes too.
Assim: uso ==
se você quer dizer os objetos devem representar a mesma coisa (mais uso comum) e is
se você quer dizer os objetos devem estar em peças idênticas de memória (você saberia se você precisava do último)
Além disso, você pode sobrecarregar ==
via o operador __eq__
, mas você não pode sobrecarregar is
.
Outras dicas
Como já foi claramente explicado acima.
é : utilizado para o teste de identidade ( 'objetos' idênticos)
== : utilizado para o teste de igualdade (~~ valor idêntico)
Também tenha em mente que o Python usa corda internar (como uma otimização) para que possa obter os seguintes efeitos colaterais estranhos:
>>> a = "test"
>>> b = "test"
>>> a is b
True
>>> "test_string" is "test" + "_" + "string"
True
>>> a = 5; b = 6; c = 5; d = a
>>> d is a
True # --> expected
>>> b is a
False # --> expected
>>> c is a
True # --> unexpected