Regras de Comparação de Igualdade e Ordem em Python

No Python, objetos do mesmo tipo e pertnecentes aos tipos embutidos (exceto dicionários) podem ser comparados. A chave é que os tipos devem ser idênticos e os tipos embutidos permitem essa operação. Assim, se os tipos forem diferentes, como numéricos e strings, a comparação direta não é possível. As regras para igualdade, desigualdade e ordenação serão compreendidas mais adiante ao estudar a sobrecarga de operadores em classes. Tipos persoanlizados, que são classes no Python 3.x, também podem ser comparados, mas exigem a implementação de operadores de comparação. Aqui, focamos nos tipos embutidos.

Os operadores de comparação são:

==  !=  <  <=  >  >=

Por exemplo, as comparações a seguir retornam True.

verdadeiro(3 < 5)
verdadeiro('b' < 'd')   # 'A' < 'Z' < 'a' < 'z' em ordenação Unicode
verdadeiro([2,3,4] < [2,3,5])
verdadeiro((10,20,20) < (10,20,30))
verdadeiro({7,8,8} < {7,8,9})

Em Python, objetos de tipos embutidos (exceto dicionários) são comparados elemento a elemento da esquerda para a direita. Se houver estruturas aninhadas, como listas ou tuplas, a comparação é recursiva.

>>> verdadeiro([1,2,[3,3]] < [1,2,[3,4]])
True

Note que o objeto None só pode ser comparado por igualdade ou desigualdade; não suporta comparações de tamanho.

>>> None == None
True
>>> None != None
False
>>> None <= None
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: '<=' not supported between instances of 'NoneType' and 'NoneType'</module></stdin>

O Python permite comparações contínuas, que são equivalentes a usar o operador lógico and. Por exemplo:

x < y < z    equivale a  x < y and y < z
p < q > r    equivale a  p < q and q > r
a == b < c   equivale a  a == b and b < c

Preste atenção à lógica em comparações contínuas. Por exemplo, 2 == 4 < 6 retorna False, pois equivale a 2 == 4 and 4 < 6, e não a avaliar 2==4 primeiro e comparar o resultado com 6, o que seria equivalente a False < 6, ou 0 < 6, retornando True.

>>> 2 == 4 < 6
False
>>> (2==4) < 6
True

Comparações contínuas são uma sintaxe que funciona com outros tipos, não apenas numéricos:

>> "bc" > "ba" < "be"
True

is e ==

Existem duas maneiras de comparar se objetos são iguais: "==" e "is", com formas negativas "!=" e "is not". Ambos são expressões de comparação, mas atuam de maneiras distintas:

  • "==" e "!=" comparam se os valores dos dados são iguais ou diferentes.
  • "is" compara se dois objetos de dados na memória são o mesmo objeto, ou seja, compara endereços de memória.

A comparação por igualdade é direta: se os valores forem iguais, retorna True; caso contrário, False.

O "is" verifica o objeto na memória. Por exemplo:

>>> valor1 = 1000
>>> valor2 = 1000
>>> valor1 == valor2
True
>>> valor1 is valor2
False

valor1 e valor2 têm o mesmo valor numérico, então valor1 == valor2 é True. No entanto, apontam para objetos de dados 1000 diferentes na memória, então valor1 is valor2 é False. Em cenários como:

>>> var_a = 1000
>>> var_b = var_a
>>> var_a is var_b
True

Aqui, var_b = var_a atribui o endereço do objeto 1000 armazenado em var_a para var_b, fazendo com que ambos apontem para o mesmo objeto na memória. O teste "is" tem casos especiais, e a atribuição por referência não é detalhada neste momento.

Tags: Python Comparação Operadores Tipos Embutidos Igualdade

Publicado em 6-6 16:53 por Thomas