浅拷贝和深拷贝有什么区别

深拷贝和浅拷贝是在复制对象或数据结构时所使用的两种不同的拷贝方法,它们之间的主要区别体现在拷贝的程度、对原始对象内部结构的影响以及处理引用类型数据的方式上。以下是关于它们区别的详细解释:

浅拷贝(Shallow Copy)

  1. 拷贝内容
    • 浅拷贝会创建一个新的对象,并复制原始对象的基本数据类型的字段值。
    • 对于引用类型的字段,浅拷贝只复制引用(即内存地址),而不是引用的对象本身。
  2. 对原始对象的影响
    • 由于浅拷贝对引用类型字段只复制了引用,因此新对象和原始对象会共享这些引用所指向的对象。
    • 对新对象中的引用类型字段所做的修改,会影响到原始对象中相应的字段,因为它们指向的是同一个对象。
  3. 示例
    假设有一个包含列表的对象aa的列表中包含一个字符串'b'。使用浅拷贝创建对象c后,c的列表仍然指向与a相同的字符串对象'b'。修改c中的字符串(如果允许的话,这里只是为了示例)或a中的列表内容(例如添加新元素),都会影响到另一个对象。

深拷贝(Deep Copy)

  1. 拷贝内容
    • 深拷贝也会创建一个新的对象,并复制原始对象的基本数据类型的字段值。
    • 对于引用类型的字段,深拷贝会递归地复制所引用的对象及其子对象,直到最底层的基本数据类型。
  2. 对原始对象的影响
    • 由于深拷贝复制了引用的对象及其子对象,新对象和原始对象是完全独立的。
    • 对新对象中的任何修改都不会影响到原始对象。
  3. 示例
    同样以上述包含列表的对象a为例,使用深拷贝创建对象d后,d的列表将包含a的列表的一个全新副本,而不是引用。因此,修改d中的列表内容(例如添加新元素)不会影响到a的列表。

总结

  • 拷贝程度:浅拷贝只复制对象本身和对象中的基本数据类型字段,而深拷贝会递归地复制对象及其所有子对象。
  • 对原始对象的影响:浅拷贝后,新对象和原始对象会共享引用类型字段所指向的对象;而深拷贝后,新对象和原始对象是完全独立的。
  • 处理引用类型数据的方式:浅拷贝只复制引用,深拷贝则复制引用的对象及其子对象。

在实际应用中,选择深拷贝还是浅拷贝取决于具体的需求和场景。如果需要复制的对象只包含基本数据类型字段,或者不希望新对象和原始对象共享引用类型字段所指向的对象,那么应该使用深拷贝;否则,如果性能是关键考虑因素,并且可以接受新对象和原始对象共享引用类型字段所指向的对象,那么可以选择浅拷贝。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/761378.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringCloud-服务网关-Gateway

1.服务网关在微服务中的应用 (1)对外提供服务的难题分析: 微服务架构下的应用系统体系很庞大,光是需要独立部署的基础组件就有注册中心、配置中心和服务总线、Turbine异常聚合和监控大盘、调用链追踪器和链路聚合,还有Kaka和MQ之类的中间件&…

最短路模型——AcWing 188. 武士风度的牛

最短路模型 定义 最短路模型是图论中的一个经典问题,旨在寻找从图中一个顶点到另一个顶点的路径,使得这条路径上的边(或边的权重)之和最小。这一模型在许多实际问题中有着广泛的应用,比如网络路由、地图导航、物流配…

AI绘画-Stable Diffusion 原理介绍及使用

引言 好像很多朋友对AI绘图有兴趣,AI绘画背后,依旧是大模型的训练。但绘图类AI对计算机显卡有较高要求。建议先了解基本原理及如何使用,在看看如何实现自己垂直行业的绘图AI逻辑。或者作为使用者,调用已有的server接口。 首先需…

Advanced slides插件无法预览幻灯片

advanced-slides的官方地址: MSzturc/obsidian-advanced-slides: Create markdown-based reveal.js presentations in Obsidian (github.com) 官方教程和文档: Advanced Slides Documentation (mszturc.github.io) 中文版也有博客翻译了:Ob…

[数据集][目标检测]桥梁检测数据集VOC+YOLO格式1116张1类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):1116 标注数量(xml文件个数):1116 标注数量(txt文件个数):1116 标注…

51单片机第21步_将TIM0用作两个8位定时器同时将TIM1用作波特率发生器

本章重点讲解将TIM0用作两个8位定时器,同时将TIM1用作波特率发生器。 当定时器T0在方式3时,T1不能产生中断,但可以正常工作在方式0、1、2下,大多数情况下,T1将用作串口的波特率发生器。 1、定时器0工作在模式3框图&a…

【基础篇】第4章 Elasticsearch 查询与过滤

在Elasticsearch的世界里,高效地从海量数据中检索出所需信息是其核心价值所在。本章将深入解析查询与过滤的机制,从基础查询到复合查询,再到全文搜索与分析器的定制,为你揭开数据检索的神秘面纱。 4.1 基本查询 4.1.1 Match查询…

从手工作坊到智能工厂:APS与MES的升级之路

一、APS:制造业的中枢 APS(AdvancedPlanningandScheduling),堪称制造业的数据接收和处理中枢,其借助前沿的算法与缜密的逻辑构建排程模型,全方位综合考量市场的多元需求、工厂的实际产能、物料的储备情况、…

Sentinel 采用的是什么限流算法?

引言:Sentinel 是一款由阿里巴巴开源的流量控制组件,提供了多种流控规则和限流算法,能够有效保护服务不被过载,同时实现服务的稳定运行。本文将深入探讨 Sentinel 所采用的主要限流算法,包括固定窗口计数器、滑动窗口计…

从0开始建SMARTFORMS表格

一、简介步骤 1、设置纸张的大小(页格式) 2、设置字体大小(样式) 3、设置表格模板 二、详细操作步骤 1、设置页格式 事务码:SPAD 参考操作:SAP Smartforms页格式创建与使用_sap 页格式-CSDN博客 SA…

【Altium】AD-焊盘介绍

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 介绍PCB设计工具中焊盘的组成 2、 知识点 为元件创建封装时,焊盘都是不可获取的部分,一个完整的焊盘,包含了哪些部分,各自又是什么作用。 3、软硬件环境 1&#xff…

深度学习 --- stanford cs231学习笔记六(训练神经网络之权重的初始化与批归一化)

权重矩阵的初始化与批归一化 3,权重矩阵的初始化 深度学习所学习的重点就是要根据损失函数训练权重矩阵中的系数。即便如此,权重函数也不能为空,总是需要初始化为某个值。 3,1 全都初始化为同一个常数可以吗? 首先要简…

英飞凌TC3xx之DMA工作原理及应用实例

英飞凌TC3xx之DMA工作原理及应用实例 1 DMA的架构2 必要的术语解释3 DMA请求3.1 DMA软件请求3.2 DMA硬件请求3.3 DMA 菊花链请求3.4 DMA自动启动请求3.5 总结4 小结DMA是直接存储访问Direct Memory Access的简称。它的唯一职能就是在不需要CPU参与的情况下,将数据从源地址搬运…

go Channel原理 (二)

Channel 设计原理 不要通过共享内存的方式进行通信,而是应该通过通信的方式共享内存。 在主流编程语言中,多个线程传递数据的方式一般都是共享内存。 Go 可以使用共享内存加互斥锁进行通信,同时也提供了一种不同的并发模型,即通…

复兴社:凝聚多方力量,共促乡村繁荣

复兴社自成立以来,始终肩负着推动全国经济发展、实现共同富裕的重任。乡村振兴作为实现这一目标的重要途径之一,一直是复兴社的工作重点。在李忠平会长的领导下,复兴社通过联合政府、企业和社会各界的资源,共同推进乡村振兴&#…

基于STM32的智能门锁控制系统

目录 引言环境准备智能门锁控制系统基础代码实现:实现智能门锁控制系统 4.1 数据采集模块4.2 数据处理与分析4.3 控制系统实现4.4 用户界面与数据可视化应用场景:门锁管理与优化问题解决方案与优化收尾与总结 1. 引言 智能门锁控制系统通过使用STM32嵌…

Is ChatGPT a Good Personality Recognizer? A Preliminary Study?

ChatGPT是一个很好的人格识别者吗?初步调研 摘要1 介绍2 背景和相关工作3 实验3.1 数据集3.2 提示策略3.3 基线3.4 评估指标3.5 实现细节3.6 Overall Performance (RQ1)3.7 ChatGPT在人格识别上的公平性 (RQ2)3.8 ChatGPT对下游任务的人格识别能力(RQ3&a…

Java 面试指南合集

JVM 篇 线程篇 springBoot篇 SpringCloud篇 待更新 黑夜无论怎样悠长,白昼总会到来。 此文会一直更新哈 如果你希望成功,当以恒心为良友,以经验为参谋,以当心为兄弟,以希望为哨兵。

行业分析---造车新势力之极氪汽车

1 前言 在之前的博客中,笔者撰写了多篇行业类分析的文章(科技新能源): 《行业分析---我眼中的Apple Inc.》 《行业分析---马斯克的Tesla》 《行业分析---造车新势力之蔚来汽车》 《行业分析---造车新势力之小鹏汽车》 《行业分析-…

绘图黑系配色

随便看了几篇小论文,里面的黑配色挺喜欢的,虽然平时SCI系配色用的多,但看到纯黑配色与黑加蓝配色,那就是我最心上的最优style。