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?

Foi útil?

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top