Sobes.tech
Middle

Python dasturlash tilining asosida turgan referens modelni qanday tushunasiz?

sobes.tech AI

AIdan javob

Python'da o'zgaruvchilar xotirada obyektlarga (ob'ektlarga) havolalar (aloqalar) bo'lib, o'z qiymatlari uchun konteynerlar emas. Bir o'zgaruvchiga qiymat tayinlaganimizda, u aslida bu qiymatni o'z ichiga olgan ob'ektga ishora qilmoqda. O'zgaruvchi, o'zgartiriladigan ob'ektga (masalan, ro'yxat yoki lug'at) ishora qilsa, u holda o'zgaruvchining ishora qilayotgan ob'ekti o'zgartiriladi. O'zgaruvchi, o'zgartirilmaydigan ob'ektga (masalan, raqam, satr yoki tupl) ishora qilsa, xotirada yangi ob'ekt yaratiladi va o'zgaruvchi unga ishora qilmoqda.

# O'zgartirilmaydigan ob'ekt (int)
a = 10
b = a # a va b dastlab bir xil ob'ektga ishora qilmoqda
print(id(a), id(b)) # Bir xil id

a = 20 # Yangi ob'ekt 20 yaratiladi, a unga ishora qilmoqda
print(id(a), id(b)) # Turli id, b hali ham 10 ga ishora qilmoqda

# O'zgartiriladigan ob'ekt (ro'yxat)
list1 = [1, 2, 3]
list2 = list1 # list1 va list2 bir xil ro'yxatga ishora qilmoqda
print(id(list1), id(list2)) # Bir xil id

list1.append(4) # Ikkalasi ham ishora qilayotgan ob'ektni o'zgartiradi
print(list1)
print(list2) # Ikkala ro'yxat ham o'zgargan
print(id(list1), id(list2)) # Hali ham bir xil id

Havola hisoblash mexanizmi avtomatik xotira boshqaruvi uchun ishlatiladi. Har bir ob'ekt, unga ishora qilayotgan o'zgaruvchilar sonini kuzatadi. Agar bu son nolga teng bo'lsa, ob'ekt kirish mumkin bo'lmay qoladi va axlat to'plovchi (garbage collector) uning xotirasini bo'shatadi.

C kabi to'g'ridan-to'g'ri qiymatlarni o'zgaruvchilarga saqlash tillaridan muhim farq shundaki, Python'da b = a yozilganda, a ning qiymati b ga ko'chirilmaydi, balki b endi a ning ishora qilayotgan ob'ektiga ishora qilmoqda.