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.