Aprenda o operador de identidade Python e a diferença entre o operador "==" e "IS"
Este artigo foi criado principalmente para explicar um operador importante em python (“IDENTITY OPERATOR”) e como um operador de identidade difere (é, não é ) do operador de comparação (==)
.
OPERADOR DE IDENTIDADE
O operador de identidade (“is ”
e “is not ”
) é usado para comparar a localização da memória do objeto. Quando um objeto é criado na memória, um endereço de memória exclusivo é alocado para esse objeto.
‘==’
compara se ambos os valores do objeto são idênticos ou não.'is'
compara se ambos os objetos pertencem ao mesmo local de memória.
Crie três objetos de string Nome, Nome1 e Nome2. Os objetos de string Nome e Nome2 terão o mesmo valor e Nome1 terão valores diferentes.
Quando criamos esses objetos, o que acontece nos bastidores é que esse objeto será criado na memória e estará disponível durante a vida útil do programa.
Agora você pode usar um operador de comparação “== ”
para verificar se ambos os valores do objeto são iguais. A saída do operador de comparação será um valor booleano (True ou False).
Agora que você comparou dois valores para determinar a igualdade, vamos dar uma olhada em como funciona o operador identidade.
A função Id()
integrada é usada para obter a “identidade” de um objeto. Um número inteiro que será único e constante para o objeto durante seu tempo de vida.
Para simplificar, pense nisso como um ID governamental exclusivo ou ID Emp atribuído a você, da mesma forma, um valor inteiro exclusivo é atribuído para cada objeto.
Agora você pode comparar 2 referências de objetos usando o operador “is”
.
Quando comparo Name e Name1 ou Name2 usando o operador de identidade, o que ele faz no back-end é simplesmente executar “id(Name ) == id(Nome2) ”
. Como id(Name) e id(Name2) compartilham o mesmo local de memória, ele retorna True.
Agora vem a parte interessante. Veja nosso exemplo anterior, onde Nome e Nome1 têm valores idênticos e retornam o mesmo valor inteiro quando executamos a função id()
. Por que você acha que os objetos “Name_new” e “Name_le” não são idênticos, embora compartilhem os mesmos valores da captura de tela abaixo?
Isso se deve à implementação do design python. Quando você cria um objeto inteiro no intervalo (-5.256) e objetos string maiores ou iguais a 20 caracteres, em vez de criar objetos diferentes na memória para o mesmo valor, esses objetos atuar como um ponteiro para objetos já criados.
A representação pictórica abaixo lhe dará uma ideia clara do que vimos até agora neste artigo.
Resumo
Neste artigo, vimos o que é um operador de identidade. Como o operador de comparação e o operador de identidade são usados, projete a implementação de como um objeto é criado na memória.