শ্যালো কপি (Shallow Copy)
একটি অবজেক্টের শ্যালো কপি "মেন" অবজেক্টটি কপি করে, কিন্তু ইনার অবজেক্টগুলো কপি করে না।
"ইনার অবজেক্টগুলো" মূল অবজেক্ট এবং এর কপির মধ্যে শেয়ার করা হয়।
শ্যালো কপির সমস্যা হলো দুটি অবজেক্ট স্বাধীন নয়। যদি আপনি একটি অবজেক্ট মডিফাই করেন, পরিবর্তনটি অন্য অবজেক্টে রিফ্লেক্ট হবে।
ডিপ কপি (Deep Copy)
একটি ডিপ কপি হলো একটি অবজেক্টের সম্পূর্ণ স্বাধীন কপি। যদি আমরা আমাদের অবজেক্ট কপি করি, আমরা পুরো অবজেক্ট স্ট্রাকচার কপি করব।
যদি আপনি একটি অবজেক্ট মডিফাই করেন, পরিবর্তনটি অন্য অবজেক্টে রিফ্লেক্ট হবে না।
উদাহরণ
class Program
{
static void Main(string[] args)
{
// Shallow Copy
ShallowCopy obj = new ShallowCopy();
obj.a = 10;
ShallowCopy obj1 = new ShallowCopy();
obj1 = obj;
Console.WriteLine("{0} {1}", obj1.a, obj.a); // 10,10
obj1.a = 5;
Console.WriteLine("{0} {1}", obj1.a, obj.a); // 5,5
// Deep Copy
DeepCopy d = new DeepCopy();
d.a = 10;
DeepCopy d1 = new DeepCopy();
d1.a = d.a;
Console.WriteLine("{0} {1}", d1.a, d.a); // 10,10
d1.a = 5;
Console.WriteLine("{0} {1}", d1.a, d.a); // 5,10
Console.ReadLine();
}
}
class ShallowCopy
{
public int a = 10;
}
class DeepCopy
{
public int a = 10;
}
আউটপুট
10 10 5 5 10 10 5 10
নোট: উপরের উদাহরণে ShallowCopy এবং DeepCopy ক্লাস দুটোই একই লক্ষণ বিশিষ্ট (শুধু একটি int ফিল্ড)। শ্যালো কপি রেফারেন্স অ্যাসাইনমেন্ট (obj1 = obj) দিয়ে করা হয়েছে, যা একই অবজেক্টকে পয়েন্ট করে। ডিপ কপি ভ্যালু অ্যাসাইনমেন্ট (d1.a = d.a) দিয়ে করা হয়েছে, যা আলাদা মেমরি লোকেশন তৈরি করে। রিয়েল ওয়ার্ল্ডে ডিপ কপির জন্য ICloneable, কপি কনস্ট্রাক্টর, বা সিরিয়ালাইজেশন/ডিসিরিয়ালাইজেশন ব্যবহার করা হয়।