Sobes.tech
Middle

Kaip suprantate nuorodų modelį, ant kurio pagrįsta Python programavimo kalba?

sobes.tech AI

Atsakymas iš AI

Python kalbant, kintamieji yra nuorodos (ryšiai) į atmintyje esančius objektus, o ne jų pačių reikšmių konteineriai. Kai priskiriame reikšmę kintamajam, jis iš tikrųjų pradeda rodyti į objektą, kuriame yra ši reikšmė. Kai keičiasi kintamasis, kuris nurodo keičiamą objektą (pvz., sąrašą ar žodyną), keičiasi pats objektas, į kurį nurodo kintamasis. Kai keičiasi kintamasis, kuris nurodo nekintamą objektą (pvz., skaičių, eilutę ar tuple), atmintyje sukuriamas naujas objektas, ir kintamasis pradeda rodyti į jį.

# Nekintamas objektas (int)
a = 10
b = a # pradžioje a ir b nurodo tą patį objektą
print(id(a), id(b)) # Tie patys ID

a = 20 # Sukuriamas naujas 20 objektas, į kurį nurodo a
print(id(a), id(b)) # Skirtingi ID, b vis dar nurodo į 10

# Keičiamas objektas (sąrašas)
list1 = [1, 2, 3]
list2 = list1 # abu nurodo tą patį sąrašą
print(id(list1), id(list2)) # Tie patys ID

list1.append(4) # Keičia objektą, į kurį nurodo abu
print(list1)
print(list2) # Abu sąrašai pakeisti
print(id(list1), id(list2)) # Vis dar tie patys ID

Nuorodų skaičiavimo mechanizmas naudojamas automatiškai atminties valdymui. Kiekvienas objektas stebi, kiek kintamųjų į jį nukreipia. Kai šis skaičius pasiekia nulį, objektas tampa neprieinamas, ir šiukšlių surinkėjas atlaisvina užimamą atmintį.

Svarbus skirtumas nuo kalbų, kurios saugo reikšmes tiesiogiai kintamuosiuose (pvz., C), yra tas, kad Python'e, rašant b = a, a reikšmė nėra kopijuojama į b, o b pradeda nurodyti tą patį objektą kaip ir a.