A ==
equivalência do valor do teste do operador. O is
operador testa a identidade do objeto, o Python testa se os dois são realmente o mesmo objeto (ou seja, vivem no mesmo endereço na memória).
>>> a = 'banana'
>>> b = 'banana'
>>> a is b
True
Neste exemplo, o Python criou apenas um objeto de string e os dois a
e b
se refere a ele. O motivo é que o Python armazena e reutiliza internamente algumas seqüências de caracteres como uma otimização; na verdade, existe apenas uma string 'banana' na memória, compartilhada por aeb; Para disparar o comportamento normal, você precisa usar seqüências mais longas:
>>> a = 'a longer banana'
>>> b = 'a longer banana'
>>> a == b, a is b
(True, False)
Ao criar duas listas, você obtém dois objetos:
>>> a = [1, 2, 3]
>>> b = [1, 2, 3]
>>> a is b
False
Nesse caso, diríamos que as duas listas são equivalentes, porque têm os mesmos elementos, mas não são idênticas, porque não são o mesmo objeto. Se dois objetos são idênticos, eles também são equivalentes, mas se forem equivalentes, não são necessariamente idênticos.
Se a
se refere a um objeto e você atribui b = a
, as duas variáveis se referem ao mesmo objeto:
>>> a = [1, 2, 3]
>>> b = a
>>> b is a
True