深浅拷贝的区别

简介: 深浅拷贝的区别

首先要了解什么是浅拷贝,什么是深拷贝,才能更好的清除他们有什么区别,从而如何实现深浅拷贝

一,什么是浅拷贝?

浅拷贝(shallow copy):指创建一个新的数据结构,该数据结构中的元素值是原始数据结构中元素的副本;只复制指向某个对象的指针,而不复制这个对象本身,新旧对象共享一块内存

二,什么是深拷贝?

深拷贝(deep copy):指创建一个新的数据结构,该数据结构中的所有元素及其嵌套元素都是原始数据结构中元素的副本;复制并创建一个一模一样的对象,不共享内存,修改新对象旧对象不会改变

三,深浅拷贝有什么区别?

深拷贝和浅拷贝的区别在于复制数据结构时是否复制了其中的嵌套对象或数组;

选择深拷贝还是浅拷贝取决于具体的需求,以及对数据结构中嵌套元素的处理方式。在处理较为复杂的数据结构时,特别是涉及到嵌套对象或数组的情况下,深拷贝通常更适合确保数据的独立性和完整性;

上述已分析两者区别。

四,浅拷贝如何实现?

像是一些简单的赋值,那就是浅拷贝,

Object.assign()、展开操作符(spread operator)、Array.slice()等也是浅拷贝实现的方法

实例:

 

// 原始数组
const originalArray = [1, 2, 3];
// 使用展开操作符进行浅拷贝
const shallowCopy = [...originalArray];
console.log(shallowCopy); // 输出: [1, 2, 3]

在上面的示例中,[...originalArray] 使用了展开操作符来创建了 originalArray 的浅拷贝。浅拷贝后的数组 shallowCopy 中的元素值与原始数组 originalArray 中的元素值相同,但它们是独立的副本,对其中一个进行修改不会影响另一个。

五,如何实现深拷贝?

使用递归遍历原始数据结构,并对其中的对象和数组进行递归复制。另外,也可以使用现成的第三方库,比如 lodash 中的 cloneDeep 方法来实现深拷贝。

实例:

 

function deepCopy(obj) {
  if (typeof obj !== 'object' || obj === null) {
    // 如果不是对象或者是null,则直接返回
    return obj;
  }
  let copy = Array.isArray(obj) ? [] : {};
  for (let key in obj) {
    if (Object.prototype.hasOwnProperty.call(obj, key)) {
      copy[key] = deepCopy(obj[key]);
    }
  }
  return copy;
}
// 原始对象
const originalObject = {
  a: 1,
  b: {
    c: 2,
    d: [3, 4]
  }
};
// 深拷贝
const deepClone = deepCopy(originalObject);
console.log(deepClone);

在上面的示例中,deepCopy 函数通过递归遍历原始对象 obj,并对其中的对象和数组进行递归复制,从而实现了深拷贝。

相关文章
|
SQL 监控 网络协议
在服务器上部署MySQL服务
在云服务器上部署自己的MySQL服务(centOS7系统),并且配置MySQL主从复制
|
人工智能 算法 C++
【算法编程】随机数的不重复选择
       前一篇文章中,我们在Java中用实现两种不同接口的类,解决了不重复选择随机数的问题。现在我们在C++中,通过几种不同的算法来解决上述问题。
1061 0
|
2天前
|
云安全 数据采集 人工智能
古茗联名引爆全网,阿里云三层防护助力对抗黑产
阿里云三层校验+风险识别,为古茗每一杯奶茶保驾护航!
古茗联名引爆全网,阿里云三层防护助力对抗黑产
|
6天前
|
人工智能 中间件 API
AutoGen for .NET - 架构学习指南
《AutoGen for .NET 架构学习指南》系统解析微软多智能体框架,涵盖新旧双架构、核心设计、技术栈与实战路径,助你从入门到精通,构建分布式AI协同系统。
308 142
|
2天前
|
存储 机器学习/深度学习 人工智能
大模型微调技术:LoRA原理与实践
本文深入解析大语言模型微调中的关键技术——低秩自适应(LoRA)。通过分析全参数微调的计算瓶颈,详细阐述LoRA的数学原理、实现机制和优势特点。文章包含完整的PyTorch实现代码、性能对比实验以及实际应用场景,为开发者提供高效微调大模型的实践指南。
407 0
|
3天前
|
传感器 人工智能 算法
数字孪生智慧水务系统,三维立体平台,沃思智能
智慧水务系统融合物联网、数字孪生与AI技术,实现供水全流程智能监测、预测性维护与动态优化。通过实时数据采集与三维建模,提升漏损控制、节能降耗与应急响应能力,推动水务管理从经验驱动迈向数据驱动,助力城市水资源精细化、可持续化管理。
267 142
|
2天前
|
存储 人工智能 Java
AI 超级智能体全栈项目阶段四:学术分析 AI 项目 RAG 落地指南:基于 Spring AI 的本地与阿里云知识库实践
本文介绍RAG(检索增强生成)技术,结合Spring AI与本地及云知识库实现学术分析AI应用,利用阿里云Qwen-Plus模型提升回答准确性与可信度。
205 90
AI 超级智能体全栈项目阶段四:学术分析 AI 项目 RAG 落地指南:基于 Spring AI 的本地与阿里云知识库实践
|
17天前
|
存储 关系型数据库 分布式数据库
PostgreSQL 18 发布,快来 PolarDB 尝鲜!
PostgreSQL 18 发布,PolarDB for PostgreSQL 全面兼容。新版本支持异步I/O、UUIDv7、虚拟生成列、逻辑复制增强及OAuth认证,显著提升性能与安全。PolarDB-PG 18 支持存算分离架构,融合海量弹性存储与极致计算性能,搭配丰富插件生态,为企业提供高效、稳定、灵活的云数据库解决方案,助力企业数字化转型如虎添翼!

热门文章

最新文章