Python: Różnica między == a „is”

8-maj-2018

Można mieć wątpliwości w jaki sposób porównywać ze sobą wartości, bo dostępne są dwie podobne instrukcje:

  • operator porównania wartości zmiennych ==

oraz

  • operator porównania zmiennych „is”

Najpierw zobaczmy sytuację kiedy oba operatory zwrócą te same wyniki:

a = 'mouse'
b = 'mouse'

#sprawdzam czy a == b
print (a==b)

#sprawdzam czy a i b to ta sama zmienna (operator is)
print (a is b)

#is sprawdza czy 2 zmienne są identyczne - identyfikator zmiennej zwraca funkcja id()
print(id(a),id(b))

W tym przypadku operator == i is zadziałał tak samo, a wywołane na końcu funkcje id() zwracają taką samą liczbę. Co się jednak stanie jeśli zmienimy skrypt o tak:

a = 'mouse'
b = 'mous'
b+='e'

#sprawdzam czy a == b
print (a==b)

#sprawdzam czy a i b to ta sama zmienna (operator is)
print (a is b)

#is sprawdza czy 2 zmienne są identyczne - identyfikator zmiennej zwraca funkcja id()
print(id(a),id(b))

No cóż. Teraz różnice już są! Operator == nadal zwraca True, bo w zmiennej a i b jest taka sama wartość. Jednak porównanie operatorem is zwraca False. Dlaczego? Bo a i b to różne zmienne, które wskazują w różne miejsca w pamięci. Widać to kiedy funkcja id zwraca różne identyfikatory dla tych zmiennych

Podsumowujac

== bada czy wartości zmiennych są sobie równe. Ten operator powinien być używany do testowania czy wartości zmiennych są sobie równe różne itp

is jest bardziej zaawasowanym operatorem. Sprawdza on, czy dwie zmienne wskazują w to samo miejsce w pamięci, czyli innymi słowy czy te dwie zmienne są takie same.

Komentarze są wyłączone

Autor: Rafał Kraik