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.