Sobes.tech
Middle

Ինչպե՞ս եք հասկանում հղման մոդելը, որի վրա հիմնված է Python ծրագրավորման լեզուն։

sobes.tech AI

Պատասխան AI-ից

Python- ում փոփոխականները հղումներ (կապեր) են հիշողության մեջ գտնվող օբյեկտների, ոչ թե իրենց արժեքների կոնտեյներներ: Երբ մենք նշանակում ենք արժեք փոփոխականին, այն իրականում սկսում է ցույց տալ այն օբյեկտին, որը պարունակում է այդ արժեքը: Երբ փոփոխականը, որը հղում է փոփոխական փոփոխվող օբյեկտին (օրինակ, ցանկ կամ բառարան), փոխվում է, փոխվում է հենց այն օբյեկտը, որի վրա հղում է կատարում փոփոխականը: Երբ փոփոխականը, որը հղում է անփոփոխ օբյեկտին (օրինակ, թիվ, տող կամ տիպլ), փոխվում է, հիշողության մեջ ստեղծվում է նոր օբյեկտ, և փոփոխականը սկսում է ցույց տալ այդին:

# Անփոփոխ օբյեկտ (int)
a = 10
b = a # սկզբում a և b հղում են նույն օբյեկտին
print(id(a), id(b)) # նույն id

a = 20 # ստեղծում է նոր 20 օբյեկտ, որի վրա հղում է a
print(id(a), id(b)) # տարբեր id, b դեռ հղում է 10-ին

# Փոփոխվող օբյեկտ (ցանկ)
list1 = [1, 2, 3]
list2 = list1 # երկուսը հղում են նույն ցանկին
print(id(list1), id(list2)) # նույն id

list1.append(4) # փոփոխում է օբյեկտը, որի վրա հղում են երկուսը
print(list1)
print(list2) # երկու ցանկերն էլ փոխվել են
print(id(list1), id(list2)) # նույն id

Հղման հաշվարկման մեխանիզմը օգտագործվում է ավտոմատ հիշողության կառավարման համար: Ամեն մի օբյեկտ հետևում է այն փոփոխականների քանակին, որոնք հղում են անում նրան: Երբ այդ թիվը հասնում է զրոյի, օբյեկտը դառնում է անհասանելի, և աղբամուս հավաքողը ազատում է զբաղեցրած հիշողությունը:

Մեծ կարևորություն ունի տարբերությունը այն լեզուներից, որոնք ուղղակիորեն պահում են արժեքները փոփոխականներում (օրինակ, C), քանի որ Python- ում, երբ գրում ենք b = a, a-ի արժեքը չի պատճենվում b-ում, այլ b-ը սկսում է հղում կատարել նույն օբյեկտին, ինչ a-ը։