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]
ab[1, 2, 3, 4]
a i b to DWIE NAZWY tego samego obiektu listy, a nie dwie listy
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
a[1, 2, 3]b[1, 2, 3]
a i b — dwa różne obiekty o tej samej zawartości: a == b, ale nie a is b
Operatorco to sprawdza?a = [1,2,3]; b = [1,2,3]
==czy zawartość jest taka samaTrue
isten sam obiekt w pamięciFalse
★★ 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
Otwórz praktykę →