Rozdział 11 · Mnóstwo informacji!
Kompendium, aliasing, == i is
Dwie nazwy mogą wskazywać na ten sam lista — i to nie jest błąd, lecz fundamentalna cecha tego, jak Python działa z obiektami zmiennymi.
Aliasing: dwa imiona to ten sam obiekt
W §11.7 już widzieliśmy ostrzeżenie: b = a nie tworzy kopii
listy. Przyjrzyjmy się bliżej, co naprawdę się dzieje.
aliasing.py
a = [1, 2, 3]
b = a
b.append(4)
print(a) # [1, 2, 3, 4] – też się zmieniło!
print(b) # [1, 2, 3, 4]
Nie stworzyliśmy drugiego lista — stworzyliśmy drugie imię
b = a nie kopiuje danych. Python po prostu mówi: "Teraz imię b wskazuje na to samo miejsce co a». Formalny termin tego to aliasing (współdzielone odniesienie). Zmiana przez którąkolwiek z nazw jest widoczna w obu przypadkach, ponieważ obiekt lista jest w rzeczywistości taki sam.== porównuje treść is porównuje obiekt
Świetna okazja, by skonsolidować materiał z rozdziału 9 na nowym materiale:
eq_vs_is.py
a = [1, 2, 3]
b = [1, 2, 3]
print(a == b) #True – Ta sama zawartość
print(a is b) #False to dwie RÓŻNE byty
c = a
print(a is c) #True to c ta sama nazwa – alias a
| Operator | co to sprawdza? | a = [1,2,3]; b = [1,2,3] |
|---|---|---|
== | czy zawartość jest taka sama | True |
is | ten sam obiekt w pamięci | False |
★★ Zadanie samodzielne
Przewidywać wynik
Określone: x = [10, 20], y = x, y.append(30). Bez uruchamiania kodu odpowiedz: co jest równe x? A jeśli zamiast y = x było y = x.copy()?
Praktyka: aliasing, == i is
interaktywny laptop bezpośrednio w przeglądarce – Python 3.14 przez Pyodide, bez instalacji