Sobes.tech
Middle

Kā jūs saprotat atsauces modeli, uz kura balstīta Python programmēšanas valoda?

sobes.tech AI

Atbilde no AI

Python valodā mainīgie ir atsauces (saistības) uz atmiņā esošiem objektiem, nevis to vērtību konteineri. Kad piešķiram vērtību mainīgajam, tas faktiski sāk norādīt uz objektu, kas satur šo vērtību. Mainot mainīgo, kas norāda uz maināmu objektu (piemēram, sarakstu vai vārdnīcu), tiek mainīts pats objekts, uz kuru norāda mainīgais. Mainot mainīgo, kas norāda uz nemaināmu objektu (piemēram, skaitli, virkni vai tuple), atmiņā tiek izveidots jauns objekts, un mainīgais sāk norādīt uz to.

# Nemaināms objekts (int)
a = 10
b = a # sākumā a un b norāda uz to pašu objektu
print(id(a), id(b)) # Tāds pats ID

a = 20 # Izveido jaunu 20 objektu, uz kuru norāda a
print(id(a), id(b)) # Atšķirīgi ID, b joprojām norāda uz 10

# Maināms objekts (saraksts)
list1 = [1, 2, 3]
list2 = list1 # abi norāda uz to pašu sarakstu
print(id(list1), id(list2)) # Tāds pats ID

list1.append(4) # Maina objektu, uz kuru norāda abi
print(list1)
print(list2) # Abi saraksti ir mainīti
print(id(list1), id(list2)) # Joprojām tas pats ID

Referenču skaita mehānisms tiek izmantots automātiskai atmiņas pārvaldībai. Katrs objekts uzrauga, cik daudz mainīgo norāda uz to. Kad šis skaits sasniedz nulli, objekts kļūst nepieejams, un atkritumu savācējs atbrīvo to atmiņu, ko tas aizņēma.

Svarīga atšķirība no valodām ar tiešu vērtību glabāšanu mainīgajos (piemēram, C) ir tā, ka Python, rakstot b = a, a vērtība netiek kopēta b, bet b sāk norādīt uz to pašu objektu kā a.