Pular para o conteúdo

Igualdade e comparação

is compara pelo valor, por estrutura — e as três formas de comparar coleções e objetos.

is pergunta “são iguais?” pelo valor, e não “são o mesmo objeto?”. Duas listas com os mesmos itens são iguais; dois records com os mesmos campos também.

dataforge
assert [1, 2] is [1, 2]
assert {"a": 1, "b": 2} is {"b": 2, "a": 1}     // a ordem das chaves nao importa
assert {1, 2} is {2, 1}
assert [1, 2] isnt [2, 1]                        // a ordem da lista importa

record Ponto:
    x: Integer
    y: Integer
assert Ponto(1, 2) is Ponto(1, 2)               // record: por estrutura
assert Ponto(1, 2) isnt Ponto(2, 1)

Tipos diferentes nunca são iguais#

dataforge
assert 1 isnt "1"
assert 1 is 1.0                    // numeros comparam pelo valor
// 1 is "1" e acusado pelo check: 'igualdade-impossivel'

Ordenar#

dataforge
assert "banana" bigger "abacate"          // texto: ordem de dicionario
assert "Z" smaller "a"                       // maiuscula vem antes!
assert sorted(["b", "A", "c"]) is ["A", "b", "c"]
assert sorted(["b", "A", "c"], lambda s: s.lower()) is ["A", "b", "c"]
assert 1 smaller 2 smaller 3                  // a comparacao encadeia