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 тизмеси оригинал жана көчүрмө ортосунда бөлүшүлөт, ал эми терең көчүрмөдө жаңы тизмеси түзүлөт.