关于深拷贝与浅拷贝的区别

python之浅拷贝和深拷贝的区别 赋值 在我们开始讨论浅拷贝和深拷贝的区别之前,首先我们必须清楚什么是赋值? 在Python中,所谓的赋值实际上就是对象引用的传递而已,当创建一个对象的时候,再赋值给另外一个变量的时候,并不是赋值给另一个变量。而是把这个变量在地址空间的id地址值传递给另一个变量,简单的说就是拷贝了这个对象的引用。看图片,可能比较容易理解。 从图中,我们很容易的看到,a和b两个变量在地址空间中是一样。后来,我们又给... 阅读详情

目录

一、浅拷贝

二、深拷贝

三、深拷贝的实现(5种)

1. JSON.Stringify(JSON.pare(被拷贝对象))

2. for in

3. 展开运算符(...)

4.Object.assign(target,sources)

5. 递归实现


我们在聊起深拷贝和浅拷贝首先要知道一点就是关于JavaScript中变量存储类型

-------这里如果有小伙伴知道的话就省略此处-----

我们常见的数据类型有基本数据类型和引用数据类型两种

①、基本数据类型 :直接存储在栈中。

②、引用数据类型 :将对象引用的地址存储在栈中,对象中的数据存储在堆中。

为了更好理解以下用图片来展示:值传递和引用传递

--------------------------------------------------------------------

一、浅拷贝

      概念 :浅拷贝就是拷贝的地址,我在把对象a复制给对象b的时候,改变b对象的内容,则a对象的内容也会随之改变

var obj = {
  name : "靳帅杰",
  age : 25
}
var obj1 = obj;
obj1.name = "改变靳帅杰";
//我们在改变obj1的内容obj也会改变,因为我们拷贝的是地址
console.log(obj.name) //改变靳帅杰
console.log(obj1.name) //改变靳帅杰

二、深拷贝

      概念 :深拷贝就是拷贝对象中的值,我们在把对象a复制给对象b的时候,我们在改变对象b的内容的时候,a是不会变的

var name = "靳帅杰"
var names = name;
names = "改变靳帅杰"
console.log(name,names) //靳帅杰 , 改变靳帅杰

----我们在拷贝对象的时候为了解决拷贝后改变数据不影响原数据的情况下,就需要用到深拷贝-----

三、深拷贝的实现(5种)

1. JSON.Stringify(JSON.pare(被拷贝对象))

var obj = {
  name :"靳帅杰",
  age:18,
}
var obj1 = JSON.parse(JSON.stringify(obj))
obj1.name = "靳帅杰修改后"
obj1.age = 22;
console.log(obj.name,obj.age) //靳帅杰 18
console.log(obj1.name,obj1.age) //靳帅杰修改后 22

2. for in

function deepCopy(obj) {
  let objs = {}
  for(let key in obj) {
    objs[key] = obj[key]
  }
  return objs
}
 
let obj = {
  name : "靳帅杰",
  age : 25
}
var obj1 = deepCopy(obj)
obj1.a = "修改后靳帅杰"
console.log(deepCopy(obj))

3. 展开运算符(...)

var  obj1={
name : "靳帅杰",
age : 25
}
var obj2 = {...obj1}
obj2.name = 修改后靳帅杰
console.log(obj1.name);  //靳帅杰
console.log(obj2.name);  //修改后靳帅杰

4.Object.assign(target,sources)

Object.assign() 方法用于将所有值从一个或多个源对象复制到目标对象,它将返回目标对象。

target =>  是目标对象

sources =>  源对象

var  obj1={
   name : "靳帅杰",
   age : 25
};
var  obj2=Object.assign({},obj1)
obj2.name="修改后靳帅杰";
console.log(obj1.name);  //靳帅杰
console.log(obj2.name);  //修改后靳帅杰

5. 递归实现

AWS SQS跨账户访问失败排查指南 在使用AWS SQS(Simple Queue Service)时,跨账户访问是常见的业务场景。例如,账户A的应用程序向队列发送消息,账户B的消费者从队列拉取消息。尽管AWS官方文档明确支持此类配置,但在实际应用中,由于权限模型的复杂性,开发者和运维人员常会遇到“策略已配置但无法接收消息”的问题。通过本文的逐步排查指南,您不仅可以解决当前问题,还能深入理解AWS跨账户访问的权限模型。接收方账户的用户或角色必须同时附加IAM策略,显式授权操作目标队列。尽管策略看似允许接收方操作,实际测试中却返回空消息或。 阅读详情

相关推荐

Ansys-结构动力学分析-圆柱斜齿轮模态分析学习心得

模态分析的步骤基本一直,不同点在于选择什么单元类型,模型,节点约束等 圆柱斜齿轮模态分析的难点在于圆柱斜齿轮的模型建立,和所要约束的节点的选择。 用命令流方法建立齿轮模型效率较高,当然,在ansys里建立复杂的模型实在不敢恭维,对于自下而上建模,需要知道每个关键点的坐标位置。下图是创建圆柱斜齿轮模型的命令流方式。 模型不同使用的数据也就不同了。 对于施加约束的问题这就必须要熟悉select e...

weixin_45385183的博客 1831

理解浅拷贝和深拷贝以及实现方法

浅拷贝只复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存。但深拷贝会另外创造一个一模一样的对象,新对象跟原对象不共享内存,修改新对象不会修改到原对象。

铁锤妹妹的博客 5858

BLHeli_S电调刷Bluejay固件实战:解锁双向DShot与RPM滤波全攻略

本文详细介绍了如何为BLHeli_S电调刷写开源Bluejay固件,以解锁双向DShot协议与RPM滤波等关键功能。内容涵盖硬件兼容性检查、固件刷写全流程、双向DShot启用与OSD报错解决方案,并对48kHz与96kHz PWM频率的选择提供了实战建议,帮助穿越机玩家在不更换硬件的前提下显著提升飞行性能与操控体验。

weixin_29188997的博客 512

浅拷贝和深拷贝浅析

浅拷贝与深拷贝的一点浅析,记录。

我的小鱼干呢! 804

69、SAP数据库归档重做日志备份策略与工具详解

本文详细解析了SAP数据库归档重做日志备份的重要性及策略,介绍了SAP提供的备份工具brarchive及其配置和使用方法,探讨了BRBACKUP与BRARCHIVE的联合运行、一致在线备份、备用数据库备份场景以及备份策略的综合应用与优化。此外,还分析了备份过程中常见问题的解决方法、备份监控与评估流程、与第三方备份解决方案的集成方式,以及未来备份技术的发展趋势和应对策略。通过合理运用这些策略和工具,可以有效保障SAP数据库的安全性和可恢复性。

peace的博客 135

强化学习与行为树的融合在游戏编程中的应用

在游戏中,我们可以将游戏的状态作为智能体的状态,将游戏的奖励作为强化学习中的奖励信号,从而训练智能体在游戏中做出最佳决策。强化学习通过试错学习来优化角色的决策策略,而行为树提供了一种灵活的方式来组合和调整不同的行为。行为树可以灵活地调整和组合不同的行为,以适应游戏中不同的情境和目标。在游戏开发中,强化学习和行为树是两种常见的技术,它们被广泛应用于游戏智能的实现。接下来,我们可以定义一个具体的行为树(BehaviorTree),该行为树由一系列节点组成,每个节点代表一个特定的行为或决策。

TechO_O的博客 681

浅拷贝和深拷贝 JSON.parse和JSON.stringify

参考一 JSON.parse(JSON.stringify(obj))我们一般用来深拷贝,其过程说白了 就是利用JSON.stringify 将js对象序列化(JSON字符串),再使用JSON.parse来反序列化(还原)js对象;序列化的作用是存储(对象本身存储的只是一个地址映射,如果断电,对象将不复存在,因此需将对象的内容转换成字符串的形式再保存在磁盘上 )和传输(例如 如果请求的Conte...

前端技术的学习整理 6949

信号检测算法的MATLAB仿真:能量检测、循环平稳检测和匹配滤波检测

根据具体的应用场景和要求,选择合适的信号检测算法可以提高系统的性能和可靠性。在无线电通信中,信号检测是一项重要的任务,它用于检测和识别接收到的信号。在本文中,我们将介绍三种常用的信号检测算法:能量检测、循环平稳检测和匹配滤波检测,并提供相应的MATLAB源代码进行仿真实现。在上述代码中,我们首先设置了能量检测的阈值,然后生成了一个包含1000个服从正态分布的随机信号样本的信号。在上述代码中,我们首先设置了信号模板,然后生成了一个包含信号模板的信号样本。最后,通过比较相关性的最大值与阈值来判断信号是否存在。

PixelLancer的博客 1363

浅拷贝与深拷贝的区别(详解)

浅拷贝与深拷贝的区别 html 浅拷贝与深拷贝 一、数据类型 数据分为基本数据类型(String, Number, Boolean, Null, Undefined,Symbol)和对象数据类型。 基本数据类型的特点:直接存储在栈(stack)中的数据 引用数据类型的特点:存储的是该对象在栈中引用,真实的数据存放在堆内存里 引用数据类型在栈中存储了指针,该指针指向堆中该实体的起始地址。当解释器寻找引用值时,会首先检索其在栈中的地址,取得地址后从堆中获得实体。 ​​ 二、浅拷贝与深拷贝 深拷贝和浅拷

Mark Sheng的博客 12万+

一文吃透 OData Deep Insert:从框架原理到 ABAP 实战

本文面向ABAP工程师,解析OData服务中的Deep Insert技术。文章首先阐述Deep Insert的业务背景,说明其适用于父子层级数据必须成组创建的场景(如销售订单与行项目)。随后深入框架实现机制,介绍SAP Gateway如何通过CREATE_DEEP_ENTITY方法处理嵌套请求,并强调开发者的责任边界。通过销售订单案例,文章对比了Deep Insert与$batch的适用场景差异,提供请求负载示例和DPC_EXT实现骨架代码。最后给出MPC_EXT声明深结构的三种套路,以及事务处理和错误处理

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 225

ExpressLRS(ELRS)接收机技术全景:从历史演进、技术底层到产业生态全解析——上

ExpressLRS(ELRS)是一种由全球开源社区驱动的双向射频遥控链路协议栈,其接收机作为核心终端,承担信号接收解调、遥控指令解析、飞控数据交互与遥测回传等关键功能。自2018年问世以来,ELRS凭借极致性能、低成本、开放生态和强兼容性,从航模DIY方案发展为消费级无人机领域的事实标准,并逐步渗透工业级场景。 ELRS接收机采用模块化分层架构,支持2.4GHz和900MHz双频段,通过LoRa、FLRC、FSK多调制模式实现低延迟与远距离平衡。其核心技术包括自适应跳频抗干扰、TDD双向链路和极简数据包。

bother3000的博客 303

浅拷贝与深拷贝的区别

浅拷贝与深拷贝 一、数据类型 数据分为基本数据类型(String, Number, Boolean, Null, Undefined,Symbol)和对象数据类型。 基本数据类型的特点:直接存储在栈(stack)中的数据 引用数据类型的特点:存储的是该对象在栈中引用,真实的数据存放在堆内存里 引用数据类型在栈中存储了指针,该指针指向堆中该实体的起始地址。当解释器寻找引用值时,会首先检索其在栈中的地址,取得地址后从堆中获得实体。 二、浅拷贝与深拷贝 深拷贝和浅拷贝是只针对Object和Array这样的引用数

SSophia的博客 7万+

YOLOV5 自动刷图脚本实战(十五)之如何找到正确的门

DXF是一个2D游戏,我们所看到的人物移动,其实是后面的背景在移动,我们所看到的画面,不过是一个完整背景中的一个镜头视角而已想要正确找到门的坐标,我们需要对不同的地图中的每个房间做一些配置信息。

qq_38892949的博客 2811

深拷贝与浅拷贝的原理和区别

我特别想写这篇,因为我看到了一篇非常非常优秀的博客,讲的巨好!直接贴上链接,强烈建议大家去阅读原博主的 https://www.cnblogs.com/echolun/p/7889848.html 1.深拷贝和浅拷贝的区别 B复制A,A变,B变,浅拷贝。 B复制A,A变,B不变,深拷贝。 举个简单example 平常的a赋值给b,a变,b并不会变。而对于对象obj2,这种简单的赋值,obj变,obj2变,就是浅拷贝了。 这是为啥呢?这就要我们从数据类型说起了。。。。 2.基本数据类型和引用数据类型 基

weixin_43795084的博客 1万+

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

一文彻底搞懂深拷贝和浅拷贝的区别

深拷贝(Deep Copy)和浅拷贝(Shallow Copy)是在复制对象或数据结构时所使用的两种不同的拷贝方法,它们之间的区别主要在于拷贝的程度和对原始对象内部结构的影响。

永远在路上 1万+

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Python 深拷贝和浅拷贝的区别

Python 深拷贝和浅拷贝的区别 深浅拷贝在python中经常使用,其区别的外在表现是: 使用浅拷贝,当原容器对象中可变对象中有元素发生变化,拷贝得到的对象也会变化。而使用深拷贝时,不会有这种问题。 浅拷贝: # -*- coding: utf-8 -*- # @File : 浅拷贝.py # @Author : Runpeng Zhang # @Date : 2020/2/10 # @...

Rp的博客 4654

深拷贝和浅拷贝的区别

目录 深拷贝和浅拷贝 值类型 vs 引用类型 赋值 vs 浅拷贝 vs 深拷贝 对象赋值 浅拷贝 深拷贝 浅拷贝代码实现 深拷贝代码实现 深度遍历式拷贝 利用反序列化实现深拷贝 深拷贝和浅拷贝 浅拷贝(shallowCopy)只是增加了一个指针指向已存在的内存地址, 深拷贝(deepCopy)是增加了一个指针并且申请了一个新的内存,使这个增加的指针指向这个新的内存, 使用深拷贝的情况下,释放内存的时候不会因为出现浅拷贝时释放同一个内存的错误。 浅复制:仅仅是指向被复制的.

一蓑烟雨任平生 4753

Python浅拷贝与深拷贝的区别

一、浅拷贝 浅copy:是把原列表第一层的内存地址不加区分完全copy一份给新列表 list1=[ '狄仁杰', 18, [1,2] ] 注意 list2 =list1 这不叫拷贝,只能说list2与list1 指向了相同的内存地址 ```go >>> list1=["狄仁杰",18,[1,2]] >>> list2=list1.copy() # 浅拷贝 >>> print(id(list1)) 1845462466816 &

人丑就要多读书的博客 4898

【C#】深拷贝和浅拷贝、区别

浅拷贝:只复制值类型字段,引用类型字段只复制引用,使用实现。深拷贝:递归复制所有引用类型字段,创建完全独立的副本,可以通过手动复制或序列化实现。推荐方法:如果对象结构简单,可以手动实现深拷贝。如果对象结构复杂且支持序列化,可以使用序列化方法实现深拷贝。

weixin_44939430的博客 877

Python中深拷贝与浅拷贝的区别?

往期面试题:列举Python中的标准异常类?说说Python面向对象三大特性?说说Python中有几种数据类型?说说Python模块主要分哪三类?废话不多说,开始今天的题目:问:说说Py...

小詹学python的博客 1856

深拷贝与浅拷贝的区别及实现方式

浅拷贝只复制对象的第一层属性。这意味着,如果原对象或数组中的值是基本类型(如数字、字符串、布尔值等),那么新对象或数组中的对应值是独立的副本。但是,如果原对象或数组中的值是引用类型(如对象、数组等),那么新对象或数组中的对应值只是指向原引用的一个新引用。 深拷贝会递归地复制对象的所有层级,包括嵌套的对象和数组。这意味着深拷贝创建的新对象与原对象完全独立,任何对原对象的修改都不会影响到新对象,反之亦然。

jxnd123456的博客 7582

java浅拷贝和深拷贝的区别_Java 浅拷贝与深拷贝的区别

浅拷贝什么是浅拷贝被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。即对象的浅拷贝会对“主”对象进行拷贝,但不会复制主对象里面的对象。”里面的对象“会在原来的对象和它的副本之间共享。浅拷贝实例public class ShallowCopy {public static void main(String[] args) throws CloneNotSup...

weixin_28674303的博客 838

Java的深拷贝与浅拷贝的区别

1.二者的区别 浅拷贝:在拷贝一个对象时,对对象的基本数据类型的成员变量进行拷贝,但对引用类型的成员变量只进行引用的传递,并没有创建一个新的对象,当对引用类型的内容修改会影响被拷贝的对象。 深拷贝:在拷贝一个对象时,除了对基本数据类型的成员变量进行拷贝,对引用类型的成员变量进行拷贝时,创建一个新的对象来保存引用类型的成员变量。 2.浅拷贝和深拷贝的应用 浅拷贝 java中clone方法是一个浅拷贝,引用类型依然在传递引用 深拷贝 ...

蜡笔小贤的博客 1万+

深拷贝和浅拷贝区别是什么?

深拷贝和浅拷贝区别是什么? 复制一个 Java 对象 浅拷贝:复制基本类型的属性;引用类型的属性复制,复制栈中的变量 和 变量指向堆内存中的对象的指针,不复制堆内存中的对象。 深拷贝:复制基本类型的属性;引用类型的属性复制,复制栈中的变量 和 变量指向堆内存中的对象的指针和堆内存中的对象。 如何实现对象克隆? 【Java面试题与答案】整理推荐 基础与语法 集合...

ConstXiong 2万+
上一篇: javaScript基础
下一篇: 数组去重方法
JSON_JSJ
博客等级 码龄5年 4粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JSON_JSJ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值