6.1 Zmienne jako referencje
W Pythonie zmienne to referencje do obiektów, a nie same zmienne. To znaczy, kiedy tworzysz zmienną w Pythonie, po prostu tworzysz referencję do obiektu w pamięci.
Ta cecha języka ma ważne konsekwencje dla pracy ze zmiennymi, zwłaszcza przy przekazywaniu obiektów do funkcji lub ich przypisywaniu innym zmiennym.
Kiedy tworzysz zmienną i przypisujesz jej wartość, Python alokuje obiekt w pamięci dla tej wartości i tworzy zmienną jako referencję do tego obiektu. Jeśli przypiszesz jedną zmienną do drugiej, nowa zmienna będzie odnosiła się do tego samego obiektu, co pierwotna zmienna. Oznacza to, że zmiany dokonane za pomocą jednej zmiennej będą miały odzwierciedlenie również na drugiej, jeśli obiekt jest mutowalny.
Przykład:
a = [1, 2, 3]
b = a
b.append(4)
print(a) # Wyświetli: [1, 2, 3, 4]
Dodaliśmy liczbę 4
do zmiennej b
, ale ona została dodana również do listy w zmiennej a
, ponieważ obie zmienne są tylko referencjami do obiektu listy [1, 2, 3].
6.2 Niemutowalne obiekty
W Pythonie obiekty dzielą się na mutowalne i niemutowalne. Mutowalne obiekty, takie jak listy i słowniki, można zmieniać po ich utworzeniu.
Niemutowalne obiekty, takie jak stringi i liczby, nie mogą być zmieniane po ich utworzeniu. Kiedy pracujesz z niemutowalnymi obiektami, zmiany prowadzą do utworzenia nowego obiektu:
Przypisanie nigdy nie zmienia obiektu:
a = 5 # a przechowuje referencję do obiektu 5
b = a # b też przechowuje referencję do obiektu 5
b = 3 # teraz b przechowuje referencję do obiektu 3
print(a) # Wyświetli: 5
Obiekt można zmienić, wywołując jego funkcję:
a = [1, 2, 3]
b = a
b.append(4)
print(a) # Wyświetli: [1, 2, 3, 4]
Ale są niemutowalne obiekty, które mają funkcje. Te funkcje nie zmieniają oryginalnego obiektu, ale zwracają nowy, który zawiera nowy wynik:
name = "Alex"
print(name) # Wyświetli: Alex
name2 = name.lower()
print(name2) # Wyświetli: alex
Struny to niemutowalne obiekty. I mimo że mają metody, te metody nigdy nie zmieniają struny - zamiast tego zawsze zwracają nową strunę (nowy obiekt). Stary obiekt pozostaje bez zmian.
6.3 Praca z typem None
W Pythonie jest specjalny typ danych reprezentujący brak wartości - None
. Używa się go do oznaczania pustych zmiennych lub jako zwracana wartość funkcji, które nic nie zwracają. Zrozumienie None jest ważne dla zarządzania zachowaniem programu, szczególnie w kontekście operatorów warunkowych i pracy z danymi.
Podstawy użycia None
None
to jedyna instancja klasy NoneType
. Używa się go do oznaczania, że zmienna nie ma wartości. W warunkach None
ocenia się jako fałsz (False
).
a = None
if a:
print("a jest True")
else:
print("a jest None lub False")
Porównanie z None
Sprawdzanie zmiennej na None powinno być wykonywane przy użyciu operatora is
, a nie ==. Operator is
sprawdza identyczność, nie równość wartości.
a = None
if a is None:
print("a jest None")
else:
print("a ma wartość")
None w funkcjach
None
jest często używany w funkcjach, które nie powinny jawnie zwracać wartości. Jeśli funkcja nie zwraca wartości, niejawnie zwraca None
.
def func():
print("Ta funkcja zwraca None")
result = func()
print(result) # Wyświetli: None
None i listy
None
można używać w listach, krotkach lub innych kolekcjach do oznaczania braku elementu na określonej pozycji.
my_list = [1, None, 3]
print(my_list) # Wyświetli: [1, None, 3]
GO TO FULL VERSION