什么是浅拷贝?它与C#中的深拷贝有何不同?

浅拷贝-

对象的浅表副本将复制“主”对象,但不复制内部对象。

“内部对象”在原始对象及其副本之间共享。

浅表副本的问题在于两个对象不是独立的。如果修改一个对象,则更改将反映在另一个对象中。

深度复制-

深层副本是对象的完全独立的副本。如果我们复制对象,则将复制整个对象结构。

如果修改一个对象,则更改将不会反映在另一个对象中。

示例

class Program{
   static void Main(string[] args){
      //浅拷贝
      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
      //深度复制
      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