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]] - ორიგინალი არ შეიცვალა
ამიტომ, არჩევანი ზედაპირული და ღრმა კოპირების შორის დამოკიდებულია კოპიის დამოუკიდებლობის მოთხოვნებზე.