Wiele osób zaczynających swoją przygodę z Pythonem jest zafascynowana elastycznością tego języka oraz składnią, która jest dość intuicyjna. Następnie zderzają się z problemem, że za bardzo chcieliby upraszczać, a co za tym idzie nie do końca poprawnie stosują różne operatory. Chyba najczęściej mylnie używane są operatory porównania ==
oraz is
.
Operatory porównania "==" oraz "is"
Oba operatory służą do porównywania, ale porównują nieco inne rzeczy. Spójrzmy na poniższy przykład:
dni = ['poniedziałek', 'wtorek', 'sroda'] nowe_dni = dni print(dni == nowe_dni) print(dni is nowe_dni)
Wynik wykonania tego programu będzie następujący:
True True
Wykonajmy teraz inną operację:
dni = ['poniedziałek', 'wtorek', 'sroda'] nowe_dni = list(dni) print(dni == nowe_dni) print(dni is nowe_dni)
I ponownie sprawdźmy wynik:
True False
Skąd ta różnica? Oba operatory służą do porównywania, ale działają nieco odmiennie. Operator ==
sprawdza, czy dwa obiekty są identyczne, czyli czy ich “zawartość” jest taka sama. Operator is
służy do sprawdzenia, czy dwa obiekty wskazują na ten sam adres pamięci. W drugim przypadku z punktu widzenia alokacji pamięci utworzyliśmy nową listę, która zapisana została w nowym obszarze pamięci komputera. Dlatego wynik drugiego działania zwrócił wartość False
. Tak samo by się stało, gdybyśmy w jakikolwiek sposób zmodyfikowali zawartość zmiennej nowe_dni.
Jeżeli chcemy sprawdzić w Pythonie identyfikator danego obiektu musimy użyć metody id()
.