赋值、浅拷贝和深拷贝的区别

Gamit 数据处理,相关的文件配置 一、处理前准备 1、在主文件夹内新建test项目文件,项目内新建brdc、igs和rinex三个文件夹,分别存放广播星历,精密星历几观测值文件,所用的命令分别为sh_get_nav、sh_get_orbits和sh_get_rinex (若文件为.Z,用gunzip命令解压,若仍为d,用命令sh_crx2rnx -f 命令解压为o文件) 2、进入test项目文件夹,链接tables,运行 sh_setup -yr 2015 -apr itrf08_com.apr 3、生成station.info文件。 将t 阅读详情

        js中数据类型分为简单数据类型(Undefined、Null、Boolean、String、Number)和复杂数据类型(Object),基本数据类型按值访问,复杂数据类型按引用访问。变量的值也就分为基本类型值和引用类型值。基本类型值就是简单的数据段,引用类型值则是由多个值构成的对象。

1、赋值

  • 基本类型值在内存中占用固定大小,因为被保存在栈内存里。给新变量赋值原变量的基本类值时,会创建一个新的副本,然后把这个值复制到给新变量分配的位置上。
  • 引用类型值保存在堆内存中(动态分配空间),js不允许直接访问堆内存中的位置,因此在复制操作对象时,实际操作的是对象的引用而不是实际的对象,引用指针也保存在栈内存里。给新变量赋值原变量的引用类值时,同样会创建一个新的副本,然后把原变量的引用复制到这个新变量上。复制的其实是这个引用指针而不是对象本身,最终两个变量会指向同一个对象。

2、深拷贝和浅拷贝只针对复杂数据类型Object。

preview

3、浅拷贝:可以理解为在开辟的新的内存空间中,存放复制了原对象属性中基本类型值和引用类型值的引用。

(补图...)

  • 实现浅拷贝的方式:
// 1、for in 循环第一层
funtcion shallowCopy (obj) {
    let objClone = Array.isArray(obj) ? [] : {}
    for (let i in obj) {
        objClone[i] = obj[i]    
    }
    return objClone
}

// 2、es6 Object.assign合并对象
obj = {
    name: 'lily', 
    hobbies: ['sing', 'run']
}
let obj2 = Object.assign({}, obj)
obj.name = 'bob'  // 第一层是基本类型,不会共享
console.log(obj)  // {name: "bob", hobbies: ['sing', 'run']}
console.log(obj2)  // {name: "lily", hobbies: ['sing', 'run']}
obj2.hobbies.push('football')  // 第一层是引用类型,会被共享改变
console.log(obj)  // {name: "bob", hobbies: ['sing', 'run', 'football]}
console.log(obj2)  // {name: "lily", hobbies: ['sing', 'run', 'football]}

// 3、slice\concat等方法

// 4、es6 数组展开运算符...
let arr = [1,2,[3,4]]
let arr2 = [...arr]
arr[0] = 0
console.log(arr)  // [0,2,[3,4]]
console.log(arr2)  // [1,2,[3,4]]
arr2[2].push(5)
console.log(arr)  // [0,2,[3,4,5]]
console.log(arr2)  // [1,2,[3,4,5]]

4、深拷贝:从堆内存中开辟一个新的区域存放新对象,新对象跟原对象不共享内存,修改新对象不会改到原对象。

  • 实现深拷贝的方式:
// 1、for in 递归循环复制
function deepClone (obj) {
    let objClone = Array.isArray(obj) ? [] : {}
    if (obj && typeof obj == 'object') {
        for (let i in obj) {  // for in循环实例自身和原型的属性
            if (obj.hasOwnProperty(i)) {  // 判断是自身的属性
                if (obj[i] && typeof obj[i] == 'object') {
                    objClone[i] = deepClone(obj[i])
                } else {
                    objClone[i] = obj[i]
                }
            }
        }
    } 

    return objClone
}

// 2、JSON.parse(JSON.stringify(obj)):
// 只适用于一般的对象和数组深拷贝,遇到function、RegExp、Date等就不准确了(具体情况具体分析)。
let obj = {
    name: 'lily',
    hobbies: ['sing', 'run']   
}
let obj2 = JSON.parse(JSON.stringify(obj))
obj.name = 'bob'
console.log(obj)  // {name: "bob", hobbies: ['sing', 'run']}
console.log(obj2)  // {name: "lily", hobbies: ['sing', 'run']}
obj2.hobbies.push('football')
console.log(obj)  // {name: "bob", hobbies: ['sing', 'run']}
console.log(obj2)  // {name: "lily", hobbies: ['sing', 'run', 'football']}

 

使用Docker搭建SearXNG搜索引擎 【代码】使用Docker搭建SearXNG搜索引擎。 阅读详情

相关推荐

LinuxMint 22.1(Ubuntu24.04)下通过Wine完美运行同花顺远航版的实战指南

本文详细介绍了在LinuxMint 22.1(Ubuntu24.04)系统下通过Wine完美运行同花顺远航版的实战指南。从基础环境准备到深度优化,包括Wine环境配置、同花顺远航版安装、字体显示调优、任务栏兼容性修复等关键步骤,帮助Linux用户高效使用同花顺远航版进行股票交易和行情分析。

weixin_30919429的博客 571

赋值、浅拷贝与深拷贝

赋值、浅拷贝与深拷贝

Small_White_0的博客 1737

Cyclone MAX独立编程实战:从硬件接口到SAP镜像的嵌入式烧录指南

在嵌入式系统开发与量产中,固件烧录是连接软件与硬件的关键环节。其核心原理是通过特定的调试接口(如JTAG、BDM)和编程算法,将编译后的机器码写入目标处理器的非易失性存储器。这项技术的价值在于确保软件在硬件上的可靠部署,是产品功能实现和质量保证的基础,广泛应用于汽车电子、工业控制等对一致性与可靠性要求极高的领域。独立编程器(Stand-Alone Programmer)在此基础上,通过集成存储、交互界面和任务逻辑,实现了脱离PC的自动化操作,极大提升了产线效率和现场维护的便捷性。本文以Cyclone MAX

weixin_34038293的博客 467

详细解析赋值、浅拷贝和深拷贝的区别

浅拷贝和深拷贝一、赋值(Copy)二、浅拷贝(Shallow Copy)1、什么是浅拷贝2、浅拷贝使用场景Object.assign()三、深拷贝(Deep Copy)1、什么是深拷贝2、深拷贝使用场景四、总结 一、赋值(Copy) 赋值是将某一数值或对象赋给某个变量的过程,分为下面 2 部分 基本数据类型:赋值,赋值之后两个变量互不影响 引用数据类型:赋址,两个变量具有相同的引用,指向同一个对...

陈迹·清欢的博客 797

Spring AI 实战:5 分钟搭建你的第一个 AI 应用(含完整代码)

能力关键 API适用场景基础对话简单问答、文本生成流式输出实时打字机效果@Bean模型需要调用外部工具结构化输出需要返回 Java 对象多轮对话聊天机器人场景Spring AI 让 Java 开发者可以用最熟悉的方式(Spring Boot + Maven)进入 AI 应用开发领域,不用学新语言,不用换框架,这是它最大的优势。但目前为止,我们的 AI 应用只能回答"它脑子里已有的知识"。如果让它读懂你自己的技术文档、公司内部知识库呢?这就是下一篇文章的主题——RAG(检索增强生成)实战。

qq_17204557的博客 644

超过4.2万个AOI(地理围栏),深圳市2025年2月15日更新的全类别AOI,矢量图层(全国22个超大特大城市AOI更新系列)

超过4.2万个AOI(地理围栏),深圳市2025年2月15日更新的全类别AOI,矢量图层(全国22个超大特大城市AOI更新系列)

1071

Python 赋值、浅拷贝和深拷贝的区别

浅拷贝:创建一个新的对象,新对象的属性和原对象相同,但是属性内部的引用还是指向源对象内部的引用(只拷贝父对象,不拷贝子对象)深拷贝:创建一个新的对象,新对象的属性和原对象相同,且属性内部的引用也指向新对象。赋值:将一个变量指向另一个对象,新的变量只是旧的变量的别名。)三者之间的主要区别在于它们如何复制对象。在Python中,赋值(

wangqiang996的博客 504

Google Earth Engine:计算逐年全球潜在蒸发量(PET)的 ERA 数据

通过获取温度、湿度和降水数据,并使用Penman-Monteith公式,我们可以得到每年的潜在蒸发量。在本文中,我们将使用Google Earth Engine平台和ERA(欧洲再分析气象数据集)数据来计算逐年全球的潜在蒸发量(PET)。接下来,我们需要对ERA数据进行预处理,以获取我们需要的潜在蒸发量数据。有了温度、湿度和降水数据,我们可以使用Penman-Monteith公式来计算每年的潜在蒸发量。最后,我们可以将计算得到的潜在蒸发量数据进行可视化,以便更好地理解全球的水汽蒸发情况。

VwajAlgorithm的博客 730

一文搞懂对象赋值,浅拷贝,深拷贝的区别

1.对象赋值:将一个对象赋值给一个新的对象时,赋的其实是对象的地址,而不是数据,两者的改变会互相影响,不管改变的是基础类型还是引用类型的值。 2.浅拷贝:浅拷贝会创建一个对象,再去遍历对象的原始对象,如果拷贝的是基础类型,那么就拷贝基础类型的值,如果拷贝的是引用类型,那么拷贝的是地址,如果改变新的对象那么原来的对象也会被改变。 浅拷贝的语法糖Object.assgin(新的对象,需要拷贝的对象) 3.深拷贝:深拷贝会对基本类型和引用类型的每一级数据都拷贝,如果改变新对象的值那么原来被拷贝的对象不会跟着改变。

weixin_43881014的博客 1377

【运动规划算法项目实战】全覆盖分区算法

全覆盖规划在机器人学领域具有重要意义,其应用场景涵盖了自动农场、扫地机器人、扫描监视无人机等多个领域。该问题的核心目标是使机器人能够从指定起点出发,规划一条避开障碍物、同时路径尽可能短的轨迹,从而实现对特定区域的全面覆盖。在实际应用中,全覆盖规划的成功实现对于提高机器人在各类环境中的工作效率至关重要。这一问题的解决涉及到高效的路径规划和规划区域分解技术。其中,梯形单元分解算法是一种常用分区的技术,过将地图上需要规划的区域进行分区,采用梯形分解的方式,可以更好地应对复杂环境。全覆盖算法规划流程。

xiewf的博客 1万+

Deep SHAP 深度学习模型的可解释性分析

Deep SHAP 算法是一种用于解释深度学习模型的技术, 该算法通过将每个特征的重要性与输出值相关联来进行解释。本博客对深度学习的模型可解释性进行了分析。

cnjs1994的博客 5120

Python直接赋值和深拷贝以及浅拷贝的区别

介绍直接赋值和深拷贝以及浅拷贝的区别

weixin_47552266的博客 1276

【华为OD机试真题 2025B卷】737、统计监控器、需要打开多少监控器 | 机试真题+思路参考+代码分析(C++、Java、Py、C语言、JS)

【华为OD机试真题 2025B卷】737、统计监控器、需要打开多少监控器 | 机试真题+思路参考+代码分析(C++、Java、Py、C语言、JS) 华为od机试,华为od机试真题,华为od机试E卷,华为odE卷,华为od机试真题E卷,华为OD,华为OD机试,华为OD机试真题,华为od机考,华为od机试D卷,华为od机试真题D卷,华为od手撕代码,华为od,华为od机试C卷,华为od e卷,华为2025e卷,od机试,2025E卷,华为OD机试E卷,什么是华为od,华为od介绍,全面了解华为od,2025华为

KJ.JK 715

python赋值浅拷贝和深拷贝的区别_python赋值、浅拷贝、深拷贝区别

在写Python过程中,经常会遇到对象的拷贝,如果不理解浅拷贝和深拷贝的概念,你的代码就可能出现一些问题。所以,在这里按个人的理解谈谈它们之间的区别。一、赋值(assignment)在《Python FAQ1》一文中,对赋值已经讲的很清楚了,关键要理解变量与对象的关系。>>> a = [1, 2, 3]>>> b = a>>> print(id...

weixin_42601134的博客 920

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

python赋值、深拷贝和浅拷贝的区别详解

一、前言 在python中,对象赋值实际上是对象的引用。当创建一个对象,然后把它赋值给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用。 二、区别 1、直接赋值,默认浅拷贝传递对象的引用而已,原始列表改变,被赋值的变量也会做相同的改变 # 直接赋值 dict_1 = {"key1":[1,2,3,4],"key2":"val2"} dict_2 = dict_1 dict_1["key1"].append(5) print("dict_1内存地址:",id(dict_1

没有一劳永逸,永远要重新开始,重新进入动荡,重新寻找,重新赢得欢喜。 4015

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Python中的赋值、浅拷贝和深拷贝的区别

Python中的赋值、浅拷贝和深拷贝的区别

limengshi138392的博客 984

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

python赋值浅拷贝和深拷贝的区别_python中赋值,浅拷贝,深拷贝的区别

a =8print(a)print(id(a))b = aprint(b)print(id(b))a =10print(a)print(id(a))###赋值:复制新对象引用的地址,不会另外开辟新的空间#################################################################浅拷贝##1.切片方式拷贝lst1 = [2,4,[7,8]]pri...

weixin_34882814的博客 147

python赋值浅拷贝和深拷贝的区别_python直接赋值、浅拷贝与深拷贝的区别解析

直接赋值:其实就是对象的引用(别名)。浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。深拷贝(deepcopy): copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象。实例解析a = {1: [1,2,3]}1. b = a: 赋值引用,a 和 b 都指向同一个对象,如下图:2. b = a.copy(): 浅拷贝, a 和 b 是一个独立的对象,但他们的子对象还是指...

weixin_28831399的博客 434

python中深拷贝和浅拷贝、赋值有什么区别

python中深拷贝和浅拷贝、赋值有什么区别以及它们之间的关系

qq_41883138的博客 715

Python中赋值、浅拷贝和深拷贝的区别

前言 文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。 PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取http://t.cn/A6Zvjdun 结论: 赋值:只是将变量指向了原对象,其实就是对象的引用(别名); 浅拷贝(copy):copy 模块的 copy 方法,只拷贝父对象,不会拷贝对象的内部的子对象...

qq_46614154的博客 625

python 赋值、浅拷贝和深拷贝的区别

一、python的三种赋值方式 直接赋值 浅拷贝(copy) 深拷贝(deepcopy) 直接赋值 直接赋值,就是对象的引用。(相当于给原来的对象起个别名),比如有个人叫李大壮,外号叫小李,对象的引用就是类似,虽然换个名字,但是两个名字指的是同一个人。 接下来用代码直观的解释 a=[1,2,[3,4],5] b=a print(b) # 输出结果为 [1,2,[3,4],5] 浅拷贝 浅拷贝,拷贝的是父对象,不会拷贝到内部的子对象。(单从一个浅字就可以看出他拷贝的东西不深,可以理解为只拷贝一层)

白夜 395

Python的赋值,深拷贝和浅拷贝的区别

在python中,对象赋值实际上是对象的引用。当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用 一般有三种方法, alist=[1,2,3,['a','b']] (1)直接赋值,传递对象的引用而已,原始列表改变,被赋值的b也会做相同的改变 alist = [1,2,3,['a','b']] b = alist print(b)...

weixin_30768661的博客 82

python赋值浅拷贝和深拷贝的区别_浅拷贝、深拷贝和普通赋值操作有什么区别?...

对于不可变对象,创建副本没有多大意义,因为它们不会改变。对于可变对象^{},^{}和^{}的行为不同。让我们用例子来讨论它们。赋值操作只是将源的引用赋值给目标,例如:>>> i = [1,2,3]>>> j=i>>> hex(id(i)), hex(id(j))>>> ('0x10296f908', '0x10296f908'...

weixin_39726044的博客 145

python赋值浅拷贝和深拷贝的区别图片_python赋值、浅拷贝、深拷贝区别

在写Python过程中,经常会遇到对象的拷贝,如果不理解浅拷贝和深拷贝的概念,你的代码就可能出现一些问题。所以,在这里按个人的理解谈谈它们之间的区别。一、赋值(assignment)在《Python FAQ1》一文中,对赋值已经讲的很清楚了,关键要理解变量与对象的关系。>>> a = [1, 2, 3]>>> b =a>>> print(id(...

weixin_39605835的博客 114

浅谈赋值、浅拷贝和深拷贝的区别

一:赋值    在Python中,对象的赋值就是简单的对象引用,这点和C++不同,如下所示:    a = [1,2,'hello',['python','C++']]    b = a    在上述情况下,a和b是一样的,它们指向同一片内存,b不过是a的别名,是引用。我们可以用b is a 去判断,返回True,表明它们的地址相同,内容相同,也可以使用id()函数来查看两个列表的地址是否相同。 ...

sunchaoyiA的博客 717
上一篇: 动态加载js如何保证顺序执行?
下一篇: 搞懂js函数柯里化
evalost
博客等级 码龄9年 6粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值