Junior — Middle
Ποια είναι η διαφορά μεταξύ βαθιάς και επιφανειακής αντιγραφής αντικειμένων στην Python, και πότε πρέπει να χρησιμοποιείται;
sobes.tech AI
Απάντηση από AI
Στην Python, η επιφανειακή αντιγραφή (shallow copy) δημιουργεί ένα νέο αντικείμενο, αλλά τα εσωτερικά αντικείμενα μέσα σε αυτό δεν αντιγράφονται, απλώς αναφέρονται μέσω αναφορών. Η βαθιά αντιγραφή (deep copy) δημιουργεί ένα νέο αντικείμενο και αντιγράφει αναδρομικά όλα τα εσωτερικά αντικείμενα, δημιουργώντας μια πλήρως ανεξάρτημη δομή.
Πότε να χρησιμοποιήσετε:
- Η επιφανειακή αντιγραφή είναι κατάλληλη αν τα εσωτερικά αντικείμενα δεν θα αλλάξουν ή αν οι αλλαγές στα εσωτερικά αντικείμενα πρέπει να αντικατοπτρίζονται και στις δύο αντιγραφές.
- Η βαθιά αντιγραφή είναι απαραίτητη όταν απαιτείται μια πλήρως ανεξάρτητη αντιγραφή του αντικειμένου με όλα τα εσωτερικά στοιχεία, ώστε οι αλλαγές στην αντιγραφή να μην επηρεάζουν το αρχικό.
Παράδειγμα:
import copy
original = [[1, 2], [3, 4]]
shallow = copy.copy(original)
deep = copy.deepcopy(original)
shallow[0][0] = 100
print(original) # [[100, 2], [3, 4]] - το αρχικό άλλαξε
deep[1][1] = 200
print(original) # [[100, 2], [3, 4]] - το αρχικό δεν άλλαξε
Επομένως, η επιλογή μεταξύ επιφανειακής και βαθιάς αντιγραφής εξαρτάται από τις απαιτήσεις ανεξαρτησίας της αντιγραφής.