js中关于深浅拷贝的区别以及具体对应实现方法

Hugging Face快速入门(重点讲解模型(Transformers)和数据集部分(Datasets)) 1. Hugging Face是什么,提供了哪些内容 2. Hugging Face模型的使用(Transformer类库) 3. Hugging Face数据集的使用(Datasets类库) 阅读详情

个人认为深浅拷贝的根本区别在于其栈内存地址是否一样!

内存地址一样即浅拷贝,被拷贝对象一旦发生改变,拷贝对象也会发生改变。

内存地址不一样即深拷贝,拷贝对象不会随着被拷贝对象的数据发生变化而变化。

下边我们来看下栈内存和堆内存的概念图片

下面是一个浅拷贝实例

let originalArr = [1, 2, 3],

    copyArr = originalArr;

console.log("=====original====>>>", originalArr);

console.log("=====copy====>>>", copyArr);

originalArr[1] = 11;

console.log("=====after_changed_original_====>>>", originalArr);

console.log("=====after_changed_copy====>>>", copyArr);

输出结果是这样,很明显原数据发生了改变,拷贝出来的数据也跟着改变了。这就是浅拷贝。

实现深拷贝的几种常见方法

1:递归方式(写一个递归拷贝函数, 层层拷贝)

let originalArr = [1, 2, 3, 4, 5];

let copyArr;

const deepCopy = (obj) => {

    let isArr= Array.isArray(obj),

        copyOne= isArr? [] : {};

    for (let iin obj) {

        if (obj.hasOwnProperty(i)) {

            if (Array.isArray(obj[i]) || typeof obj[i] === Object) {

                copyOne[i] = deepCopy(obj[i]);

            } else {

                copyOne[i] = obj[i]

                        }

            }

         }

        return copyOne;

    };

copyArr = deepCopy(originalArr);

originalArr[1] = 11;

console.log("=====after_original_change====>>>", originalArr);

console.log("=====after_original_change====>>>", copyArr);

2:JSON.parse & JSON.stringify

let originalArr = [1, 2, 3, 4, 5];

let copyArr = JSON.parse(JSON.stringify(originalArr));

originalArr[0] = 11;

console.log("=====after_changed_original====>>>", originalArr);

console.log("=====after_changed_original====>>>", copyArr);

3:jquery中的extend()

$.extend( [deep ], target, object1, objectN ] )

车辆重识别/再辨识数据集: Vehicle Re-ID Datasets Collection 车辆数据库 1.VERI-Wild: A Large Dataset and a New Method for Vehicle Re-Identification in the Wild (2019-CVPR) 数据库名称:VERI-Wild 论文:链接 数据库描述: 车辆图像由一个包含174个摄像机,拍摄范围覆盖超过200平方公里的市区CCTV系统拍摄。摄像机是24小时连续拍摄30天,其长时间的... 阅读详情

相关推荐

保姆级教程:手把手带你玩转英飞凌TC397开发板的板载资源(CAN FD、LCD、SD卡)

本文提供英飞凌TC397开发板的全面开发指南,涵盖CAN FD通信、LCD显示、SD卡文件系统和以太网通信等核心功能。通过详细的代码示例和硬件连接说明,帮助开发者快速上手并充分利用开发板的丰富资源,实现高效嵌入式系统开发。

weixin_33726313的博客 242

JavaScript深浅拷贝区别

分享一篇自己关注的微信订阅号(前端大全)文章:JavaScript浅拷贝与深拷贝 作者:浪里行舟 https://github.com/ljianshu/Blog/issues/5 这里很详细的讲解了深浅拷贝的原理,个人觉得讲的比较不错,放上来留个笔记,下面是拷贝过来的内容: 一、数据类型 数据分为基本数据类型(String, Number, Boolean, Null, Undefined,Symbol)和对象数据类型。 基本数据类型的特点:直接存储在栈(stack)中的数据 引用数据类型的特点:存储的

Sfh的博客 3810

使用CubeMX生成的项目在Keil下添加DSP库并包含arm_math头文件后报错的解决办法

问题描述: 最近使用Cube生成工程后,在Keil中使用Manage Runtime Environment即绿色小饼干按钮添加CMSIS的DSP库后编译报错。很有意思的是,STM32论坛上有外国朋友报告的同样的错误,都是30个Errors,5个Warning。 问题分析: 参考国内论坛某帖子(具体想不起来了),认为因该是Cube复制了库后,Keil从原始Packs目录下引用DSP库导致和Cub...

qq_32256951的博客 7001

深拷贝和浅拷贝的区别(javascript篇)

javascript中的深拷贝和浅拷贝概念理解

qq_48637854的博客 5940

从临床试验到互联网AB测试:边缘结构模型(MSM)如何解决‘时依性混杂’这个老大难问题

本文探讨边缘结构模型(MSM)如何解决时依性混杂问题,适用于临床试验和互联网AB测试。通过逆概率加权(IPTW)等方法,MSM能有效剥离混杂效应,准确评估长期干预效果。文章结合跨领域案例,详细解析MSM的核心原理、实施步骤及在推荐算法效果评估中的实战应用,帮助读者掌握这一先进因果推断工具。

weixin_28725949的博客 207

【AI知识点】启发式算法(Heuristic Algorithms)

启发式算法(Heuristic Algorithms) 是一种基于经验、直觉和局部优化的求解问题的算法,尤其适用于解决计算复杂度高、规模庞大的问题。它们通过简化问题、局部搜索和快速近似,提供了一种在短时间内获得“足够好”解的途径。虽然启发式算法无法保证全局最优解,但它们在实际应用中广泛使用,特别是在优化问题、任务调度和机器学习等领域。

AI完全体 3032

JavaScript中浅拷贝与深拷贝的概念及区别

用JSON.stringify将对象转成JSON字符串,再用JSON.parse()把字符串解析成对象,一去一来,新的对象产生了,而且对象会开辟新的栈,实现深拷贝。返回一个新的数组对象,这一对象是一个由begin和end决定的原数组的浅拷贝(包括begin,不包括end).原数组元素不变。Array的slice和concat方法不修改原数组,只会返回一个浅复制了原数组中的元素的一个新数组。深拷贝是指复制并创建一个一模一样的对象,不共享内存,修改新对象,旧对象保持不变。...

Yannick_H的博客 2156

机器人系统能用MQTT5.0代替ROS2吗?

更为灵活和友好的方案是通过把ROS(Robot Operating System)与MQTT(Message Queuing Telemetry Transport)协议相结合的解决方案,利用MQTT的轻量级、跨平台和广泛适用性特点,扩展ROS系统的通信能力,或将非ROS系统接入ROS网络。

QzmAIoT 2163

一篇文章彻底搞懂JavaScript中深拷贝和浅拷贝

一文让你彻底搞懂什么是JavaScript 中深拷贝和浅拷贝的区别与实现方法。 浅拷贝仅复制对象的第一层属性,引用类型属性共享同一地址,修改新对象时会影响原对象。常用方法包括 Object.assign() 和展开运算符 [...]。 深拷贝则递归复制对象及其所有嵌套属性,确保新对象独立。实现方法包括 JSON.parse(JSON.stringify(obj)),适合简单对象;以及 structuredClone()

weixin_48642777的博客 2808

LightGBM学习笔记

LightGB学习笔记1. lightgbm概述1.1 lightgbm介绍1.2 lightgbm和xgboost对比2 .直方图算法及改进2.1 直方图算法2.2 直方图算法改进2.2.1 GOSS算法3.树的生长策略4.系统设计5. 实战 lightgbm是基于boosting的学习框架,使用的是基于决策树的学习算法,具有更快的训练速度、更低的内存使用、更高的正确率、并且能够支持并行化学习,可以用来处理大规模数据,本文主要是针对学习视频https://www.bilibili.com/video/BV

一一xi的博客 3306

游戏经济数值模型的搭建过程——以标准卡牌游戏为例

一、总体规划 1.玩家分类 首先我们按照下表对玩家进行分类 付费能力即为充值额度;充值行为比如购买月卡/购买钻石;消费行为比如用钻石抽卡 在这里我们假设玩家是理性的,即玩家会以追求更高的性价比为目标进行充值与消费(即小R会优先买首冲+月卡,而不是买一个无用的无属性皮肤) 不同类型玩家之间的差异,实际上就主要由这些行为的差异而决定。 注:早期游戏制作的时候,活跃程度也是区分玩家类型的一个重要依据。不过目前现在游戏中有各种手段抹平了不同活跃玩家的差异(体力限制,活跃时间长的收益递减)..

dudu3332的博客 4229

JS—深拷贝与浅拷贝:2分钟掌握二者的区别

维度浅拷贝深拷贝独立性部分独立(仅顶层属性独立)完全独立内存占用低(共享嵌套对象)高(完全独立副本)开发成本低(原生支持)高(需处理循环引用,特殊对象)适用性简单数据复杂数据优先使用浅拷贝,除非明确需要深拷贝。深拷贝应谨慎用于大型对象(性能敏感场景)。

海晨忆的博客 1127

Thor芯片部署

英伟达Jetson Thor芯片性能分析与应用现状 摘要:英伟达最新发布的Jetson Thor芯片基于Blackwell架构,官方宣称AI算力达2070TFLOPS(FP4),较前代Orin提升7.5倍,配备14核Arm CPU和128GB内存。然而实际量产版算力缩水至700TOPS,且因4nm制程良率问题多次延期至2025-2026年交付。该芯片支持FP4/FP8量化、Transformer引擎等先进特性,适用于自动驾驶、机器人等边缘AI场景,但受供应链限制,国内厂商倾向自研方案。开发者可通过JetPa

xiaomu_347的博客 431

为什么要用深浅拷贝、什么是深浅拷贝、以及如何实现

一、深拷贝和浅拷贝 首先我们要明白一点,js中数据类型分为: 基本数据类型 (Number, String, Boolean, Null, Undefined, Symbol) 对象数据类型 ( Object ) 引用数据类型的值是保存在栈内存和堆内存中的对象。栈区内存保存变量标识符和指向堆内存中该对象的指针。当寻找引用值时,解释器会先寻找栈中的地址。然后根据地址找到堆内存的实体。 二、深浅拷贝的区别: 浅拷贝是将原始对象中的数据型字段拷贝到新对象中去,将引用型字段的“引用”复制到新对象中去,不把“引用的

这里是前端,是不一样的前端 7136

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

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

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

jxnd123456的博客 7582

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

js之- 实现深浅拷贝的各种方法

在js中,数据类型分两种: ‘基本数据类型’ 和 ‘引用数据类型’ ‘基本类型数据’ 存在于 栈内存 中,'引用数据类型’ 的属性存在于 栈内存中,值存在与 堆内存中,通过指针来指向对应值 所以,深浅拷贝主要出现在引用数据类型中 如下图,就是浅拷贝,拷贝出来的变量 copyArray,只是拷贝指针,指向的还是同一个堆内存中的数据,所以,其中一个值改变,另外一个值相应改变 如下图,就是深拷贝,拷贝出来的值,在堆内存中另外开辟空间,存储新值,通过指针指向。当改变新拷贝的值时,原值不会被改..

qq_41797950的博客 1150

JavaScript 编程中的数据类型与深浅拷贝

这类数据在栈中存储的是一个引用(指针),该引用指向堆内存中数据实体的起始地址,真正的数据存储在堆内存里。这意味着拷贝后的新对象和原对象共享同一数据实体,当新对象中引用类型的数据发生变化时,原对象中的相应数据也会改变,因为它们指向同一块内存区域。但对于引用类型元素,新数组和原数组共享这些元素的引用,修改其中一个数组中的引用类型元素,另一个数组中的相应元素也会改变。这个新数组是原数组的浅拷贝,新数组中的引用类型元素与原数组中的对应元素指向相同的内存地址。它执行的是浅拷贝,仅复制对象属性的引用,而非对象本身。

奋斗的小前端 1261

【 js 基础 】【 源码学习 】 深浅拷贝

转载自:http://www.cnblogs.com/lijiayi/p/jsdeeepcopy.html underscore的源码中,有很多地方用到了 Array.prototype.slice() 方法,但是并没有传参,实际上只是为了返回数组的副本,例如 underscore 中 clone 的方法: // Create a (shallow-cloned) duplicate of ...

似水流年的博客 559

js堆栈及深浅拷贝

js堆和栈 在js引擎中对变量的存储主要有两种位置,堆内存和栈内存。 栈内存 主要用于存储各种基本类型的变量(boolean, null, undefined, string, number, symbol) const, let对象,当我们定义const对象的时候,我们说的常量就是指针,就是const对象对应的堆内存指向是不变的。但是值的大小是可以改变的。所以const,let不能二次定...

weixin_43738272的博客 389

js知识点之深浅拷贝

首先,我们需要明确深拷贝和浅拷贝的概念。:只是拷贝了基本类型的数据,而引用类型数据,复制后也是会发生引用,我们把这种拷贝叫做浅拷贝(浅复制)。浅拷贝只复制指向某个对象的指针(引用地址),而不复制对象本身,新旧对象还是共享同一块内存。:在堆中重新分配内存,并且把源对象所有属性都进行新建拷贝,以保证深拷贝的对象的引用图不包含任何原有对象或对象图上的任何对象,拷贝后的对象与原来的对象是完全隔离,互不影响。

fyw1789的博客 1074

有关JS的深浅拷贝

前两篇文章有介绍过JS的数据类型,我们日常用的深浅拷贝,通常都是对于引用类型的值进行拷贝; 拷贝顾名思义就是复制,内存中一共分为栈内存和堆内存两大区域,所谓深浅拷贝主要是对javascript引用类型数据进行拷贝一份,浅拷贝就是引用类型数据相互赋值之后,例obj1=obj2;如果后面的操作中修改obj1或者obj2,这个时候数据是会进行相应的变化的,因为在内存中引用类型数据是存储在堆内存中,堆内存中存放的是引用类型的值,同时会有一个指针地址指向栈内存,两个引用类型数据地址一样,如果其中一个发生变化另外一个

xch____的博客 1190

javaScript中的深浅拷贝

javaScript中的深浅拷贝深、浅拷贝区别现象一: 拷贝二: 浅拷贝三: 深拷贝深拷贝常用解决办法方法一:手动复制方法二:Object.assign(target, source...)方法三:JSON.parse(JSON.stringify(obj))方法四:使用递归实现深拷贝方法五:使用其他库的函数 深、浅拷贝区别现象 一: 拷贝 // 代码段1 let str = 'string' let str_copy = str // string str_copy = 'string_copy' con

xiuluo_psz的博客 120

JavaScript进阶day4 深浅拷贝、异常处理、改变this指向处理、节流防抖

Lodash 库 实现节流和防抖1. 节流和防抖的区别是?节流: 就是指连续触发事件但是在 n 秒中只执行一次函数,比如 可以利用节流实现 1s之内 只能触发一次鼠标移动事件防抖:如果在 n 秒内又触发了事件,则会重新计算函数执行时间2. 节流和防抖的使用场景是?节流: 鼠标移动,页面尺寸发生变化,滚动条滚动等开销比较 大的情况下防抖: 搜索框输入,设定每次输入完毕n秒后发送请求,如果期 间还有输入,则从新计算时间5.节流的综合案例页面打开,可以记录上一次的视频播放位置。

2301_77358195的博客 1361

js原型原型链,闭包,深浅拷贝

在 JavaScript 中,每个对象都有一个与之关联的原型(prototype),用于实现继承和共享属性。一个对象的原型就是它的构造函数的prototype属性。我们可以通过方法获取一个对象的原型。一个对象的原型也可以被称为该对象的父对象。

xirunxiang369的博客 307

对象的常用方法及深浅拷贝

1、对象的理解 对象是一个包含相关数据和方法的集合(通常由一些变量和函数组成,我们称之为对象里面的属性和方法) 1.1 对象可以看成是Object对象构造出来的 因此,Object对象可以看做是一个构造函数,可以创造新对象; 同时Object对象本身可以当作工具方法使用; 1.2 Object对象作为工具方法 Object对象自身的方法 Object对象本身作为工具方法可以根据参数的数据类...

yyxsww的博客 415

【JavaScript】聊一聊js中的浅拷贝与深拷贝与手写实现

浅拷贝,指的是创建新的数据,这个数据有着原始数据属性值的一份精确拷贝。如果属性是基本类型,拷贝的就是基本类型的值。如果属性是引用类型,拷贝的就是内存地址即浅拷贝是拷贝一层,深层次的引用类型则共享内存地址。下面用一张图来解释一下浅拷贝深拷贝开辟一个新的栈,两个对象属完成相同,但是对应两个不同的地址,修改一个对象的属性,不会改变另一个对象的属性下面用一张图来解释一下深拷贝。

kfashfasf的博客 1181

深入探讨JavaScript高阶编程技巧:突破技能瓶颈的高级实践

实现深拷贝三种方式?自己利用递归函数书写深拷贝利用js库 lodash里面的 _.cloneDeep()利用JSON字符串转换异常处理。

阿猫故乡的博客 1686
上一篇: AMD(Modules/Asynchronous-Definition)、CMD(Common Module Definition)的区别
Keyboard_Handler
博客等级 码龄10年 0粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值