当前位置: 首页 > news >正文

深拷贝与浅拷贝的定义

原始数据类型

创建新数组并复制原始数据类型的值,而没有递归复制整个对象。

是这样来确定是不是深浅拷贝原始数据类型

浅拷贝(Shallow Copy):仅复制对象或数组的 引用,对于引用类型的元素(如对象、数组),它们仍然指向原数组中相同的内存位置。对于原始类型元素,浅拷贝复制的是值。

深拷贝(Deep Copy):不仅复制对象或数组的引用,还会递归地复制其中的所有元素(包括引用类型元素的内容),这样新数组和原数组完全独立,不会共享任何引用。

为什么 slice() 对原始类型元素表现得像深拷贝

当你使用 slice() 拷贝一个包含原始类型元素的数组时,它确实复制了 ,而不是引用。由于原始类型(例如数字、字符串等)是按值传递的,因此即使它是浅拷贝,修改新数组中的元素也不会影响原始数组。

例子:

javascript复制
let arr = [1, 2, 3];
let aCopy = arr.slice();  // 浅拷贝aCopy[0] = 10; // 修改aCopyconsole.log(arr);  // [1, 2, 3] - arr没有变化
console.log(aCopy); // [10, 2, 3] - aCopy发生了变化
  • 原始类型(数字):数组中的元素是原始类型(数字),slice() 创建了一个新的数组 aCopy,它复制了原始数组中 的副本,因此修改 aCopy[0] 不会影响 arr[0]。这种行为就像是 深拷贝,因为我们修改 aCopy 后,原数组没有任何变化。

为什么这不是深拷贝

深拷贝 是指完全复制整个数组以及数组中的所有元素,包括嵌套的对象或数组,甚至是引用类型元素的内容。对于 引用类型元素slice() 并不会创建新的独立对象,它只是复制了对象的引用。

例如:

javascript复制
let arr = [{ name: 'A' }, { name: 'B' }];
let aCopy = arr.slice();  // 浅拷贝aCopy[0].name = 'C'; // 修改aCopy中的对象console.log(arr[0].name);  // 'C' - arr[0]也发生了变化
console.log(aCopy[0].name); // 'C' - aCopy[0]发生了变化

在这个例子中,arraCopy 中的元素是对象,它们共享相同的 引用,因此修改其中一个数组中的对象会影响另一个数组。

结论

  • 对于 原始类型元素slice() 看起来像 深拷贝,因为它们按 传递。
  • 对于 引用类型元素slice()浅拷贝,它只是复制了引用,因此两个数组中引用类型元素的变化是共享的。

所以,尽管对于原始类型元素,slice() 的行为表现得像深拷贝,但它实际是 浅拷贝,因为它 复制的是值,而不是递归复制整个对象的内容。

http://www.dtcms.com/a/310721.html

相关文章:

  • 机器学习特征工程----常见的特征构建与转换方法
  • dify 升级1.7.1 插件无法下载依赖
  • 分区管控与高效协同:EtherCAT转EtherCAT网关赋能纺织生产
  • c++-reverse_iterator
  • 什么是 Redis?从基础概念到技术本质的全面解析
  • 微信小程序页面间通信的实现方式
  • 升级的MS1836C HD转CVBS/S-Video转换器
  • WooCommerce 与 ERP 系统集成解决方案
  • Agents-SDK智能体开发[1]之入门
  • 智能客服系统实战:多轮对话与知识库检索完整实现
  • DL环境捉虫
  • Python从入门到精通——第四章 程序流程控制
  • 第五届智能通信与计算国际学术会议(ICICC 2025)
  • 电子合同管理台账功能详解
  • Dify API接口上传文件 postman配置
  • Param关键字的使用
  • Pycaita二次开发基础代码解析:几何体重命名与参数提取技术
  • 如何使用Postman做接口测试
  • VS Code 插件开发教程
  • 麻醉深度监护系统市场规模从 857 百万美元向 1244 百万美元跨越,2031 年将形成更大的市场
  • 机试01——C++基础语法与库函数
  • Luckysheet 打印终极指南(预览视图+打印功能) : 2025 最新实现
  • Codeforces Educational 181(ABCD)
  • c++--格式化/clang-format
  • 亚像素级精度的二维图像配准方法
  • Java 20 新特性解析与代码示例
  • 研报复现|阿梅特欧卡莫斯集中投资法则
  • 【Kubernetes 指南】基础入门——Kubernetes 集群(二)
  • DQL 超维分析
  • QT6 源,十章绘图(2)画刷 QBrush:刷子只涉及填充颜色,线型,填充图片,以及变换矩阵这几个属性,附源代码带注释。