浅拷贝还是深拷贝?

2023-11-27

我对这两种将一个对象复制到另一个对象的方法有点陌生。我很困惑,无法找出深层复制和浅层复制之间的主要区别。我已经了解了很多关于此的理论,但我需要用适当的例子进行解释。 我有一个程序,可以将一个对象复制到另一个对象中。 -->

   class A
    {
        public int a = 0;
        public void display()
        {
            Console.WriteLine("The value of a is " + a);
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            A ob1 = new A();
            ob1.a = 10;
            ob1.display();
            A ob2 = new A();
            ob2 = ob1;
            ob2.display();
            Console.Read();
        }
    }

这是浅拷贝还是深拷贝?谁能给个答案并附上理由。如果它是深复制,那么请提供浅复制的代码,以便该程序执行与对象复制相同的工作,反之亦然。

如果上面是浅拷贝,那么连这个也应该是浅拷贝-->

            A ob1 = new A();
            ob1.a = 10;
            ob1.display();
            A ob2 = ob1;
            ob2.a = 444;
            ob1.display();

从链接here

浅拷贝尽可能少地重复。 a 的浅拷贝 集合是集合结构的副本,而不是元素。 通过浅拷贝,两个集合现在共享单独的 元素。

深拷贝复制一切。一个集合的深拷贝是两个 包含原始集合中所有元素的集合 重复的。

您的示例正在创建浅副本。

A ob1 = new A();
ob1.a = 10;
A ob2 = new A();
ob2 = ob1;

ob1.a = 5; // <-- If you see value of ob2.a after this line, it will be 5.

深拷贝将是 -

 A ob1 = new A();
 ob1.a = 10;
 A ob2 = new A();
 ob2.a = ob1.a;

 ob1.a = 5; // <-- If you see value of ob2.a after this line, it will be 10.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

浅拷贝还是深拷贝? 的相关文章

随机推荐

  • 在 python3 中合并异步迭代

    有没有一个好的方法 或者一个支持良好的库 用于在 python3 中合并异步迭代器 期望的行为与在reactivex中合并可观察量的行为基本相同 也就是说 在正常情况下 如果我合并两个异步迭代器 我希望生成的异步迭代器按时间顺序产生结果 迭
  • WPF 中的 Thread.CurrentPrincipal.Identity.Name 为空

    EDIT 简单的问题是 我怎样才能得到Thread CurrentPrincipal Identity Name让当前用户登录WPF END EDIT 我正在尝试调用一个现有方法 不在任何类型的服务中 只是 POCO 中的一个方法 来检索当
  • Java 开源调查/问卷引擎 [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 是否有一个允许问题分支的 Java 开源调查引擎 即问题 1 有 A B 或 C 选项 每个选项都会带您进入一组不同的后续问题 我找到了几个 JSurveyLib 和 Socrate
  • 基于嵌入文档计数的 MongoDB 查询

    假设我有 Order id items 如何过滤商品编号大于5的订单 您无法按嵌入集合的大小进行查询 您需要创建具有集合大小的字段以满足此类需求 mongo db 文档 size 运算符匹配任何数组 具有指定数量的元素 以下示例将匹配 对象
  • 当 ContentControl.Content 更改时开始动画

    我试图在 Button 或 ContentControl 等内容控件更改其内容时触发动画 我最初的想法是这样做
  • 如何在 Spyder 中显示图表

    自 2015 年 11 月起 plotly 开源并可用于 python https plot ly javascript open source announcement 当尝试离线绘制一些图时 这些可以在 iPython Notebook
  • 在代码隐藏中使用资源图像

    我需要动态更改应用于我的按钮之一的背景图像 但不知道如何操作 图像将添加到项目中 并将其 构建操作 设置为 资源 我已经尝试过以下操作 buttonUnits Background new ImageBrush new BitmapImag
  • 我们可以将 Firebase 实时数据库与核心 PHP 一起使用吗?

    我有一个 Android 应用程序 后端代码位于使用 MySql 的核心 PHP 中 有没有办法像我们在 MySql 上执行的方式直接从 API 执行 CRUD 操作 如果它是一个网络应用程序 可以使用 javascript 来完成 但是我
  • 使用 TextInputLayout 时更改 EditText 提示颜色

    我正在使用新的TextInputLayout来自设计库 我能够让它显示并更改浮动标签的颜色 不幸的是实际EditText提示现在始终为白色 我尝试过以编程方式更改 XML 样式中的hintColor 还尝试使用android support
  • 超出纳秒时间戳范围

    我在 Googlespeedsheet 中有一个变量 date hiring 格式如下 16 01 2016 我在Python中导入它 该变量有一个对象类型 我尝试转换为日期时间 from datetime import datetime
  • html或css中指定图像大小的区别

    这个链接非常接近我的问题 但似乎更适用于语法而不是实际渲染的输出 我看到图像的高度和宽度可以在实际的html中定义img标签 事实上我读它的方式should在那里定义 然而 我想知道当实际涉及到图像的显示方式时 什么才是重要的 如果我插入以
  • 分配新块时如何控制“std::deque”的块大小?

    当我们向a中插入一个新元素时std deque 如果现有的块都已满 它可能会分配一个新的块来包含该元素 然而 实现如何控制块大小呢 用户是否可以控制块大小 或者它仅取决于实现的选择 例如4K 还是 8K 这是实现的选定值 无法对其进行控制
  • 在系统分区写入文件

    我正在尝试将我的应用程序生成的文件写入系统分区 由于我无法在应用程序中创建 FileOutputStream 因此我在应用程序的数据目录中创建文件 更正权限 然后将其移动到系统分区 目前 下面的代码错过了 system 的可写重新安装 出于
  • 在命令行中将环境变量传递给java类

    我需要从本地文件中读取一些属性etc myconfig config 文件夹 我需要在命令行中给出这个文件路径 我已经给出了如下所述 但出现错误 显示如下 Error Could not find or load main class te
  • IntentService 不会启动使用 AlarmManager

    我知道对此有很多疑问 但我真的不知道我的错误在哪里 我的服务注册在AndroidManifest xml文件中
  • 无法加载文件或程序集“Oracle.DataAccess”或其依赖项之一。尝试加载格式不正确的程序

    我已在 IIS 7 0 Windows Server 2008 R2 64 位上安装了 Web 应用程序 我指的是 oracle DataAccess dll 当我尝试访问该应用程序时 我收到以下消息 无法加载文件或程序集 Oracle D
  • QT 5.0 QDebug编译错误

    我在使用 QDebug 编译代码时遇到问题 但我确实需要它 include
  • PHP 获取静态方法

    我想通过 var 调用类方法 如下所示 var read params array some parameter if MyClass has the static method var echo MyClass var params el
  • Zod Schema Validation 中至少一个/最少一个字段

    我已经使用 JOI 实现了此代码 其中用户必须发送 userId 和正文中的至少一个键 如何使用 ZOD 实现相同的功能 params Joi object keys userId Joi required custom objectId
  • 浅拷贝还是深拷贝?

    我对这两种将一个对象复制到另一个对象的方法有点陌生 我很困惑 无法找出深层复制和浅层复制之间的主要区别 我已经了解了很多关于此的理论 但我需要用适当的例子进行解释 我有一个程序 可以将一个对象复制到另一个对象中 gt class A pub