برنامه نویسی
🤯کلونینگ عمیق در مقابل کم عمق ???

کپی کم عمق
شاخص:
- فقط ویژگی های سطح بالا کپی می شوند. اشیاء تودرتو با مرجع کپی می شوند.
شاخص ها:
- اگر تغییر یک شی تودرتو در شیء کپی شده، شیء تودرتوی شی اصلی را نیز تغییر دهد، یک کپی کم عمق است. هم اشیاء تودرتوی اشیاء اصلی و هم کپی شده یک مرجع خواهند داشت.
let original = {
name: "Alice",
address: { city: "Wonderland" }
};
let shallowCopy = { ...original }; // Shallow copy
shallowCopy.address.city = "New Wonderland";
console.log(original.address.city); // Output: "New Wonderland"
console.log(shallowCopy.address.city); // Output: "New Wonderland"
console.log(original.address === shallowCopy.address); // Output: true
کپی عمیق
شاخص:
- تمام ویژگی ها، از جمله اشیاء تو در تو، به طور کامل کپی می شوند. هیچ ارجاعی به اشیاء تودرتوی اصلی حفظ نمی شود.
شاخص ها:
- اگر تغییر یک شی تودرتو در شیء کپی شده، شیء تودرتوی شی اصلی را تغییر ندهد، یک کپی عمیق است.
- اشیاء تودرتوی اشیاء اصلی و کپی شده ارجاع متفاوتی خواهند داشت.
let original = {
name: "Alice",
address: { city: "Wonderland" }
};
let deepCopy = JSON.parse(JSON.stringify(original)); // Deep copy
deepCopy.address.city = "New Wonderland";
console.log(original.address.city); // Output: "Wonderland"
console.log(deepCopy.address.city); // Output: "New Wonderland"
console.log(original.address === deepCopy.address); // Output: false
مراحل بررسی نوع کپی
1. ایجاد شی اصلی:
یک شی با ویژگی های تو در تو تعریف کنید.
let original = {
name: "Alice",
address: { city: "Wonderland" }
};
2. یک کپی کنید:
با استفاده از روش انتخابی خود یک کپی ایجاد کنید.
let copy = { ...original }; // For shallow copy
// or
let copy = JSON.parse(JSON.stringify(original)); // For deep copy
3. ویژگی Nested Property را در کپی تغییر دهید:
یک ویژگی تودرتو در شیء کپی شده را تغییر دهید.
copy.address.city = "New Wonderland";
4. شیء اصلی را بررسی کنید:
ویژگی تو در تو را در شی اصلی مقایسه کنید.
console.log(original.address.city); // Check if this has changed
5. مقایسه مراجع:
بررسی کنید که آیا اشیاء تو در تو همان مرجع هستند.
console.log(original.address === copy.address); // true for shallow, false for deep
خلاصه
کپی کم عمق:
- ویژگی های سطح بالا کپی می شوند.
- اشیاء تو در تو به اشتراک گذاشته می شوند (همان مرجع).
- تغییر اشیاء تو در تو در کپی بر روی نسخه اصلی تأثیر می گذارد.
کپی عمیق:
- تمام ویژگی ها، از جمله اشیاء تو در تو، به طور کامل کپی می شوند.
- اشیاء تودرتو به اشتراک گذاشته نمی شوند (مرجعات مختلف).
- تغییر اشیاء تو در تو در کپی تاثیری بر نسخه اصلی ندارد.
با دنبال کردن این مراحل و معیارها، می توانید تعیین کنید که یک کپی شی کم عمق یا عمیق است.