Sobes.tech
Junior — Middle

რა განსხვავებაა ობიექტის სრული დუბლირების პროცესსა და მისი ზედაპირული კოპირების პროცესს შორის?

sobes.tech AI

პასუხი AI-სგან

პირობის სრული კოპია (deep copy) და ზედაპირული კოპია (shallow copy) განსხვავდებიან შერწყმული ობიექტების კოპირების დონით:

  • ზედაპირული კოპია ქმნის ახალ ობიექტს, მაგრამ სხვა ობიექტებზე მიმანიშნავი ველები კოპირებულია როგორც მიმანიშნებლები. სხვა სიტყვებით რომ ვთქვათ, შერწყმული ობიექტები არ კოპირებულია, არამედ ნაწილდება ორიგინალთან და კოპიასთან შორის.

  • სრული კოპია ქმნის ახალ ობიექტს და რეკურსიულად კოპირებს ყველა შერწყმულ ობიექტს, ქმნის სრულიად დამოუკიდებელ კოპიას.

Java-ს მაგალითი:

import java.util.ArrayList;
import java.util.List;

class Person implements Cloneable {
    String name;
    List<String> hobbies;

    public Person(String name, List<String> hobbies) {
        this.name = name;
        this.hobbies = hobbies;
    }

    // ზედაპირული კოპია
    public Person shallowCopy() throws CloneNotSupportedException {
        return (Person) this.clone();
    }

    // სრული კოპია
    public Person deepCopy() {
        List<String> hobbiesCopy = new ArrayList<>(this.hobbies);
        return new Person(this.name, hobbiesCopy);
    }
}

ამ მაგალითში, ზედაპირული კოპიაში, hobbies სია იქნება გაზიარებული ორიგინალთან და კოპიასთან, ხოლო სიღრმისეულ კოპიაში, ახალი სია შეიქმნება.