JavaScript میں Shallow Copy بمقابلہ Deep Copy
JavaScript ڈیٹا کی قسم (data type) کے لحاظ سے کاپی کرنے کے دو طریقے استعمال کرتا ہے۔
Primitive Values (Copy by Value)
Primitive types میں strings, numbers, booleans, symbols, bigInt, اور null شامل ہیں۔ جب آپ کسی primitive کو کاپی کرتے ہیں، تو JavaScript میموری میں ایک نیا اور آزاد ورژن تخلیق کرتا ہے۔
مثال: let a = 10; let b = a; b = 20; نتیجہ: a کی قیمت 10 ہی رہتی ہے۔
Non-Primitive Values (Copy by Reference)
Objects اور arrays مختلف طریقے سے کام کرتے ہیں۔ یہ references استعمال کرتے ہیں۔ جب آپ کسی object کو کاپی کرتے ہیں، تو آپ صرف میموری میں اس کے مقام (location) کا pointer کاپی کرتے ہیں۔
مثال: let original = { name: "YOO" }; let copy = original; copy.name = "NEW"; نتیجہ: original.name اب "NEW" ہو چکا ہے۔
فرق: Shallow بمقابلہ Deep
ایک shallow copy کسی object کی صرف اوپری سطح (top level) کو کاپی کرتی ہے۔ اگر object کے اندر nested objects ہوں، تو یہ اب بھی اصل nested references کی طرف ہی اشارہ کرتی ہے۔ ایک deep copy تمام نئی ویلیوز کے ساتھ ایک مکمل طور پر نیا object تخلیق کرتی ہے۔
اسے پیزا کی مثال سے سمجھیں:
- Shallow Copy: آپ اور آپ کا دوست ایک ہی پیزا شیئر کر رہے ہیں۔ اگر آپ کا دوست ایک سلائس کھاتا ہے، تو آپ کے لیے بھی پیزا کم ہو جائے گا۔
- Deep Copy: آپ دونوں کے پاس اپنے اپنے الگ الگ پیزا ہیں۔ اگر آپ کا دوست ایک سلائس کھاتا ہے، تو آپ کا پیزا ویسا ہی رہے گا۔
Shallow Copy کا طریقہ
آپ shallow copy بنانے کے لیے spread operator (...) استعمال کر سکتے ہیں۔
let original = { name: "YOO", details: { age: 22 } }; let copy = { ...original };
انتباہ: اگر آپ original.details.age کو تبدیل کرتے ہیں، تو copy.details.age بھی تبدیل ہو جائے گا۔ یہ shallow copy کا جال (trap) ہے۔
Deep Copy کے طریقے
1. structuredClone()
یہ جدید براؤزرز اور Node.js میں ایک built-in فنکشن ہے۔ یہ nested structures کو بہترین طریقے سے ہینڈل کرتا ہے۔
فوائد:
- تیز اور native ہے۔
- Dates, RegExp, اور Maps کو ہینڈل کرتا ہے۔
نقصانات:
- اگر object میں functions یا DOM nodes ہوں تو یہ کام نہیں کرتا۔
2. JSON.parse(JSON.stringify())
یہ ایک پرانا طریقہ ہے جس میں آپ ایک object کو string میں تبدیل کرتے ہیں اور پھر اسے دوبارہ object بنا دیتے ہیں۔
اس سے کیوں بچنا چاہیے:
- اس میں undefined, Map, Set، یا Infinity جیسی ڈیٹا ویلیوز ضائع ہو جاتی ہیں۔
- یہ کچھ ویلیوز کو خراب (corrupt) کر سکتا ہے۔
ماخذ: https://dev.to/yogesh_992/shallow-copy-vs-deep-copy-in-java-script-explained-in-easiest-way-3dg5
