Πώς καταλαβαίνετε το μοντέλο αναφοράς στο οποίο βασίζεται η γλώσσα προγραμματισμού Python;
sobes.tech AI
Απάντηση από AI
Στην Python, οι μεταβλητές είναι αναφορές (συνδέσεις) σε αντικείμενα στη μνήμη, και όχι δοχεία για τις ίδιες τις τιμές. Όταν αναθέτουμε μια τιμή σε μια μεταβλητή, στην πραγματικότητα αρχίζει να δείχνει σε ένα αντικείμενο που περιέχει αυτήν την τιμή. Όταν αλλάζουμε μια μεταβλητή που αναφέρεται σε ένα μεταβλητό αντικείμενο (π.χ., μια λίστα ή ένα λεξικό), αλλάζει το ίδιο το αντικείμενο στο οποίο δείχνει η μεταβλητή. Όταν αλλάζουμε μια μεταβλητή που αναφέρεται σε ένα αμετάβλητο αντικείμενο (π.χ., έναν αριθμό, μια συμβολοσειρά ή ένα tuple), δημιουργείται ένα νέο αντικείμενο στη μνήμη και η μεταβλητή αρχίζει να δείχνει σε αυτό.
# Αμετάβλητο αντικείμενο (int)
a = 10
b = a # αρχικά, η a και η b αναφέρονται στο ίδιο αντικείμενο
print(id(a), id(b)) # Ίδιες ταυτότητες
a = 20 # Δημιουργεί ένα νέο αντικείμενο 20, η a δείχνει σε αυτό
print(id(a), id(b)) # Διαφορετικές ταυτότητες, η b εξακολουθεί να δείχνει στο 10
# Μεταβλητό αντικείμενο (λίστα)
list1 = [1, 2, 3]
list2 = list1 # και οι δύο δείχνουν στην ίδια λίστα
print(id(list1), id(list2)) # Ίδιες ταυτότητες
list1.append(4) # Τροποποιεί το αντικείμενο που αναφέρονται και οι δύο
print(list1)
print(list2) # Και οι δύο λίστες τροποποιούνται
print(id(list1), id(list2)) # Ίδιες ταυτότητες
Ο μηχανισμός καταμέτρησης αναφορών χρησιμοποιείται για αυτόματη διαχείριση μνήμης. Κάθε αντικείμενο παρακολουθεί τον αριθμό των μεταβλητών που αναφέρονται σε αυτό. Όταν αυτός ο αριθμός φτάσει στο μηδέν, το αντικείμενο γίνεται μη προσβάσιμο και ο συλλέκτης απορριμμάτων ελευθερώνει τη μνήμη που καταλαμβάνει.
Ένα σημαντικό πλεονέκτημα σε σύγκριση με γλώσσες που αποθηκεύουν άμεσα τις τιμές στις μεταβλητές (π.χ., C) είναι ότι στην Python, όταν γράφουμε b = a, η τιμή του a δεν αντιγράφεται στο b, αλλά το b αρχίζει να αναφέρεται στο ίδιο αντικείμενο με το a.