Kako razumete referentni model na kojem je zasnovan programski jezik Python?
sobes.tech АИ
Одговор од АИ
U Pythonu, promenljive su reference (veze) na objekte u memoriji, a ne kontejnere za same vrednosti. Kada dodelimo vrednost promenljivoj, ona zapravo počinje da ukazuje na objekat koji sadrži tu vrednost. Prilikom promene promenljive koja referiše na promenljiv objekat (npr. listu ili rečnik), menja se sam objekat na koji promenljiva ukazuje. Kada promenljiva koja referiše na nemodifikabilan objekat (npr. broj, niz ili tuple) bude promenjena, u memoriji se kreira novi objekat, i promenljiva počinje da ukazuje na njega.
# Nemodifikabilan objekat (int)
a = 10
b = a # a i b inicijalno ukazuju na isti objekat
print(id(a), id(b)) # Isti id
a = 20 # Kreira novi objekat 20, na koji a ukazuje
print(id(a), id(b)) # Različiti id, b i dalje ukazuje na 10
# Modifikabilan objekat (lista)
list1 = [1, 2, 3]
list2 = list1 # oba ukazuju na istu listu
print(id(list1), id(list2)) # Isti id
list1.append(4) # Menja objekat na koji ukazuju oba
print(list1)
print(list2) # Obje liste su izmenjene
print(id(list1), id(list2)) # Još uvek isti id
Mehanizam brojanja referenci se koristi za automatsko upravljanje memorijom. Svaki objekat prati broj promenljivih koje na njega ukazuju. Kada taj broj dostigne nulu, objekat postaje nedostupan, i sakupljač smeća oslobađa zauzetu memoriju.
Važna razlika u odnosu na jezike sa direktnim skladištenjem vrednosti u promenljive (npr. C) je ta što u Pythonu, pri b = a, vrednost a se ne kopira u b, već b počinje da ukazuje na isti objekat kao i a.