Como usar operadores de identidade no Python
Python é uma linguagem muito versátil, poderosa e conhecida por possuir a curva de aprendizagem branda. Ao longo dos últimos meses tenho publicado aqui na Prensa uma série de artigos sobre ela. Se você não leu os textos anteriores, recomendo que comece lá pelo início, no artigo de Introdução à programação em Python, e siga a trilha.
Este conteúdo é uma continuação direta do anterior, em que tento oferecer uma visão geral sobre os operadores usados na linguagem favorita dos cientistas de dados. É possível conferir a parte um aqui e a parte dois aqui.
Hoje é a vez de aprender sobre os operadores de identidade. Sirva uma xícara de café, e vamos lá.
Conhecendo os operadores de identidade
Apesar do nome um tanto assustador à primeira vista, seu propósito é simples: em programação, eles são usados para fazer a comparação entre dois objetos. Ao contrário dos operadores sobre os quais estudamos anteriormente, não se trata de realizar comparações de valor ou tipo.
Em vez disso, ao usá-los, retornam se dois ou mais operandos que fazem referência ao mesmo objeto. Esse retorno é um booleano, ou seja, True ou False.
Não ficou claro? Não se preocupe. Vamos em frente que logo você entenderá exatamente do que estou falando.
is e is not
Há dois tipos de operadores de identidade no Python: “is” e “is not”. Quem sabe um pouco de inglês (requisito obrigatório para quem estuda programação) logo percebe que eles significam “é” e “não é”, respectivamente. Para melhor entender o conceito, vamos ao exemplo:
a = 10
b = 10
print(a is b)
No código cima, podemos ver que o valor das duas variáveis é o mesmo. No entanto, “a” e “b” são objetos diferentes (lembre-se dos conceitos de Programação Orientada a Objetos, ou POO). Logo, o retorno da operação é False. Obviamente, se usarmos o operador de identidade “is not” o resultado será diferente:
print(a is not b)
Até aí, tudo bem. Mas, vamos além do uso dos operadores “is” e “is not”. Precisamos compreender a diferença entre a comparação de valores e a comparação de objetos. Confira o código abaixo:
nomes = ["max", "rosa"]
nomes2 = ["max", "rosa"]
apelidos = nomes
print(nomes == nomes2)
print(nomes is nomes2)
print(apelidos is nomes)
Tente rodar os trechos no console do Python um a um (ou salve num arquivo com a extensão .py, se preferir) e avalie os resultados. Se tudo estiver certo, estes deverão mostrar na tela do seu computador (ou do celular, se lançar mão de alguma ferramenta móvel para programar como o QPython ou PyDroid), respectivamente: True, False e True. Vamos às explicações:
Ao comparar a lista “nomes” e a lista “nomes2” com o operador de comparação “==”, o retorno é True (verdadeiro), pois os valores armazenados nelas são iguais.
Ao usar o operador “is”, a segunda linha do código retorna False (falso), pois apesar de os valores nelas contidos ser idênticos, tratam-se de objetos diferentes na memória.
O mesmo não acontece quando comparamos a lista “nomes” e “apelidos” usando o “is”. A razão disso é porque ao declaramos a variável “apelidos” na terceira linha, passamos para ela a lista “nomes” como valor. Em razão disso, essa variável aponta para o mesmo objeto que a variável “nomes”.
Apesar de parecer complexo, sua compreensão é essencial para quem pretender seguir carreira na área de programação. Não é objetivo deste artigo explicar o básico da POO como classes, herança, encapsulamento, etc. Isso fica para um artigo futuro, pois é inevitável o seu uso no dia a dia de qualquer empresa que trabalhe com dados, principalmente Big Data.
Para quem é inciante na área, basta saber que um objeto aponta para um local alocado na memória do dispositivo (lembrando que o interpretador tem seu próprio gerenciador de memória). Esses são armazenados num tipo chamado PyObject.
Em Python objetos podem ser de vários tipos, como variáveis, listas, dicionários, tuplas, entre outros. Melhor ainda: é possível afirmar que quase tudo nessa linguagem de programação pode ser considerado um objeto.
Por enquanto, é só. Espero que tenham gostado do conteúdo. Sigam-me e fiquem de olho nas minhas publicações aqui na Prensa.
No próximo artigo vamos conhecer e aprender a usar operadores de associação. Eles são úteis para verificar um valor poder ser encontrado dentro de objetos como strings e listas, entre outros tipos.
Este artigo foi escrito por Maximiliano da Rosa e publicado originalmente em Prensa.li.