当前位置: 首页 > 编程笔记 >

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

邓深
2023-03-14
本文向大家介绍什么是浅拷贝?它与C#中的深拷贝有何不同?,包括了什么是浅拷贝?它与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
 类似资料:
  • 主要内容:到底是浅拷贝还是深拷贝对于基本类型的数据以及简单的对象,它们之间的拷贝非常简单,就是按位复制内存。例如: b 和 obj2 都是以拷贝的方式初始化的,具体来说,就是将 a 和 obj1 所在内存中的数据按照二进制位(Bit)复制到 b 和 obj2 所在的内存, 这种默认的拷贝行为就是 浅拷贝 ,这和调用 memcpy() 函数的效果非常类似。 对于简单的类,默认的拷贝构造函数一般就够用了,我们也没有必要再显式地定义一

  • 本文向大家介绍深拷贝与 浅拷贝的区别?相关面试题,主要包含被问及深拷贝与 浅拷贝的区别?时的应答技巧和注意事项,需要的朋友参考一下 浅克隆:创建一个新对象,新对象的属性和原来对象完全相同,对于非基本类型属性,仍指向原有属性所指向的对象的内存地址。 深克隆:创建一个新对象,属性中引用的其他对象也会被克隆,不再指向原有对象地址。

  • 浅拷贝 对于对象或数组类型,当我们将a赋值给b,然后更改b中的属性,a也会随着变化。 也就是说,a和b指向了同一块堆内存,所以修改其中任意的值,另一个值都会随之变化,这就是浅拷贝。 深拷贝 那么相应的,如果给b放到新的内存中,将a的各个属性都复制到新内存里,就是深拷贝。 也就是说,当b中的属性有变化的时候,a内的属性不会发生变化。 参考链接: 深拷贝与浅拷贝的实现(一) javaScript中浅拷

  • 本文向大家介绍简单谈谈C#中深拷贝、浅拷贝,包括了简单谈谈C#中深拷贝、浅拷贝的使用技巧和注意事项,需要的朋友参考一下 Object.MemberwiseClone 方法 创建当前 Object 的浅表副本。 MemberwiseClone 方法创建一个浅表副本,方法是创建一个新对象,然后将当前对象的非静态字段复制到该新对象。 如果字段是值类型的,则对该字段执行逐位复制。 如果字段是引用类型,则复

  • 本文向大家介绍C# 中浅克隆与深克隆(浅拷贝与深拷贝)的区别?相关面试题,主要包含被问及C# 中浅克隆与深克隆(浅拷贝与深拷贝)的区别?时的应答技巧和注意事项,需要的朋友参考一下 (1)浅克隆 在浅克隆中,如果原型对象的成员变量是值类型,将复制一份给克隆对象;如果原型对象的成员变量是引用类型,则将引用对象的地址复制一份给克隆对象,也就是说原型对象和克隆对象的成员变量指向相同的内存地址。简单来说,在

  • 一、引言 对象拷贝(Object Copy)就是将一个对象的属性拷贝到另一个有着相同类类型的对象中去。在程序中拷贝对象是很常见的,主要是为了在新的上下文环境中复用对象的部分或全部数据。Java中有三种类型的对象拷贝:浅拷贝(Shallow Copy)、深拷贝(Deep Copy)、延迟拷贝(Lazy Copy)。 二、浅拷贝 1、什么是浅拷贝 浅拷贝是按位拷贝对象,它会创建一个新对象,这个对象有着