Sobes.tech
Middle

Hogyan érted a referencia modellt, amelyen a Python programozási nyelv alapul?

sobes.tech MI

Válasz az MI-től

Pythonban a változók referenciák (hivatkozások) a memóriában lévő objektumokra, nem pedig az értékek tartályai. Amikor értéket rendelünk egy változóhoz, valójában arra az objektumra kezd mutatni, amely tartalmazza ezt az értéket. Ha egy változó, amely mutat egy módosítható objektumra (például lista vagy szótár), akkor maga az objektum módosul, amelyhez a változó mutat. Ha egy változó, amely egy nem módosítható objektumra (például szám, sztring vagy tuple) mutat, akkor új objektum jön létre a memóriában, és a változó arra kezd mutatni.

# Nem módosítható objektum (int)
a = 10
b = a # az a és b kezdetben ugyanarra az objektumra mutatnak
print(id(a), id(b)) # Ugyanaz az azonosító

a = 20 # Létrehoz egy új 20-as objektumot, az a arra mutat
print(id(a), id(b)) # Különböző azonosítók, b még mindig az 10-re mutat

# Módosítható objektum (lista)
list1 = [1, 2, 3]
list2 = list1 # mindkettő ugyanarra a listára mutat
print(id(list1), id(list2)) # Ugyanaz az azonosító

list1.append(4) # Módosítja a mutatott objektumot
print(list1)
print(list2) # Mindkét lista módosult
print(id(list1), id(list2)) # Még mindig ugyanaz az azonosító

A referencia számlálás mechanizmusa automatikus memória kezelést biztosít. Minden objektum nyomon követi, hány változó mutat rá. Amikor ez a szám nulla lesz, az objektum elérhetetlenné válik, és a szemétgyűjtő felszabadítja a foglalt memóriát.

Fontos különbség a közvetlen értéktároló nyelvekhez (pl. C) képest, hogy Pythonban a b = a esetén az a értéke nem másolódik a b-be, hanem a b ugyanarra az objektumra kezd mutatni, mint az a.