Jak chápete referenční model, na kterém je založen programovací jazyk Python?
sobes.tech AI
Odpověď od AI
V Pythonu jsou proměnné odkazy (reference) na objekty v paměti, nikoliv kontejnery pro samotné hodnoty. Když přiřadíme hodnotu proměnné, ve skutečnosti začíná ukazovat na objekt obsahující tuto hodnotu. Při změně proměnné, která odkazuje na měnitelný objekt (například seznam nebo slovník), se mění samotný objekt, na který proměnná odkazuje. Při změně proměnné, která odkazuje na neměnitelný objekt (například číslo, řetězec nebo n-tice), se v paměti vytvoří nový objekt a proměnná na něj začne odkazovat.
# Neměnitelný objekt (int)
a = 10
b = a # a a b zpočátku odkazují na stejný objekt
print(id(a), id(b)) # Stejná id
a = 20 # Vytvoří nový objekt 20, na který a odkazuje
print(id(a), id(b)) # Různá id, b stále odkazuje na 10
# Měnitelný objekt (seznam)
list1 = [1, 2, 3]
list2 = list1 # list1 a list2 odkazují na stejný seznam
print(id(list1), id(list2)) # Stejná id
list1.append(4) # Změní objekt, na který odkazují oba
print(list1)
print(list2) # Oba seznamy jsou změněny
print(id(list1), id(list2)) # Stále stejná id
Mechanismus počítání odkazů se používá pro automatické řízení paměti. Každý objekt sleduje počet proměnných, které na něj odkazují. Když tento počet dosáhne nuly, objekt se stává nedostupným a garbage collector uvolní používanou paměť.
Důležitý rozdíl oproti jazykům s přímým ukládáním hodnot do proměnných (například C) je ten, že v Pythonu při b = a se hodnota a nekopíruje do b, ale b začíná odkazovat na stejný objekt jako a.