Cum înțelegeți modelul de referință pe care se bazează limbajul de programare Python?
sobes.tech AI
Răspuns de la AI
În Python, variabilele sunt referințe (legături) către obiecte în memorie, nu containere pentru valorile propriu-zise. Când atribuim o valoare unei variabile, ea începe de fapt să indice către un obiect care conține acea valoare. La modificarea unei variabile care face referire la un obiect mutabil (de exemplu, o listă sau un dicționar), obiectul în sine este modificat. La modificarea unei variabile care face referire la un obiect imutabil (de exemplu, un număr, un șir de caractere sau un tuplu), se creează un nou obiect în memorie, iar variabila începe să indice către acesta.
# Obiect imutabil (int)
a = 10
b = a # a și b fac referire inițial la același obiect
print(id(a), id(b)) # Id-uri identice
a = 20 # Creează un nou obiect 20, a face referire la el
print(id(a), id(b)) # Id-uri diferite, b încă face referire la 10
# Obiect mutabil (listă)
list1 = [1, 2, 3]
list2 = list1 # list1 și list2 fac referire la aceeași listă
print(id(list1), id(list2)) # Id-uri identice
list1.append(4) # Modifică obiectul la care fac referire ambele
print(list1)
print(list2) # Ambele liste sunt modificate
print(id(list1), id(list2)) # În continuare, același id
Mecanismul de numărare a referințelor este folosit pentru gestionarea automată a memoriei. Fiecare obiect urmărește numărul de variabile care fac referire la el. Când acest număr ajunge la zero, obiectul devine inaccesibil, iar colectorul de gunoi eliberează memoria ocupată.
O diferență importantă față de limbajele cu stocare directă a valorilor în variabile (de exemplu, C): în Python, la b = a, valoarea lui a nu este copiată în b, ci b începe să facă referire la același obiect ca și a.