Sobes.tech
Middle

Ako chápete referenčný model, na ktorom je založený programovací jazyk Python?

sobes.tech AI

Odpoveď od AI

V Pythone sú premenné referencie (odkazy) na objekty v pamäti, nie kontajnery pre samotných hodnôt. Keď priradíme hodnotu premennej, v skutočnosti začína ukazovať na objekt, ktorý obsahuje túto hodnotu. Pri zmene premennej, ktorá odkazuje na zmeniteľný objekt (napríklad zoznam alebo slovník), sa mení samotný objekt, na ktorý premená ukazuje. Pri zmene premennej, ktorá odkazuje na nezmeniteľný objekt (napríklad číslo, reťazec alebo n-tica), sa v pamäti vytvorí nový objekt a premená na neho začína ukazovať.

# Nezmeniteľný objekt (int)
a = 10
b = a # a a b zpočiatku odkazujú na ten istý objekt
print(id(a), id(b)) # Rovnaké id

a = 20 # Vytvorí nový objekt 20, na ktorý a ukazuje
print(id(a), id(b)) # Rôzne id, b stále ukazuje na 10

# Zmeniteľný objekt (zoznam)
list1 = [1, 2, 3]
list2 = list1 # obidva odkazujú na ten istý zoznam
print(id(list1), id(list2)) # Rovnaké id

list1.append(4) # Zmení objekt, na ktorý odkazujú obidva
print(list1)
print(list2) # Obidva zoznamy sú zmenené
print(id(list1), id(list2)) # Ešte stále rovnaké id

Mechanizmus počítania odkazov sa používa na automatické riadenie pamäte. Každý objekt sleduje počet premenných, ktoré na neho odkazujú. Keď tento počet dosiahne nulu, objekt sa stáva nedostupným a garbage collector uvoľní použitú pamäť.

Dôležitý rozdiel oproti jazykom s priamym ukladaním hodnôt do premenných (napríklad C) je ten, že v Pythone, pri b = a, hodnota a sa nekopíruje do b, ale b začína odkazovať na ten istý objekt ako a.