Python proqramlaşdırma dilinin əsaslandığı referens modelini necə başa düşürsünüz?
sobes.tech Süni İntellekt
AI-dan cavab
Python-da dəyişənlər yaddaşdakı obyektlərə (obyektlərə) istinadlar (əlaqələr)dir və öz dəyərlərinin konteynerləri deyil. Bir dəyişənə dəyər təyin etdikdə, əslində, o, həmin dəyəri ehtiva edən obyektə işarə etməyə başlayır. Dəyişən, dəyişdirilə bilən obyektə (məsələn, siyahı və ya lüğət) istinad edirsə, həmin obyekt özündə dəyişir. Dəyişən, dəyişdirilməz obyektə (məsələn, ədəd, sətir və ya tuple) istinad edirsə, yaddaşda yeni obyekt yaradılır və dəyişən ona işarə etməyə başlayır.
# Dəyişdirilməz obyekt (int)
a = 10
b = a # a və b ilkin olaraq eyni obyektə istinad edir
print(id(a), id(b)) # Eyni id
a = 20 # Yeni obyekt 20 yaradılır, a ona istinad edir
print(id(a), id(b)) # Fərqli id, b hələ də 10-a istinad edir
# Dəyişdirilə bilən obyekt (siyahı)
list1 = [1, 2, 3]
list2 = list1 # list1 və list2 eyni siyahıya istinad edir
print(id(list1), id(list2)) # Eyni id
list1.append(4) # Hər ikisinin istinad etdiyi obyekti dəyişir
print(list1)
print(list2) # Hər iki siyahı dəyişir
print(id(list1), id(list2)) # Hələ də eyni id
İstinad sayımı mexanizmi avtomatik yaddaş idarəsi üçün istifadə olunur. Hər obyekt, ona istinad edən dəyişənlərin sayını izləyir. Bu say sıfıra çatanda, obyekt əlçatan olmur və çöp toplayıcı onun istifadə etdiyi yaddaşı azad edir.
C kimi birbaşa dəyər saxlama dilləri ilə vacib fərq odur ki, Python-da b = a yazıldıqda, a-nın dəyəri b-yə kopyalanmır, əksinə, b artıq a-nın istinad etdiyi obyektə istinad edir.