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 менен шилтемелүү ошол эле объектке шилтеме кылат.