什么是深拷贝,什么是浅拷贝

简介: 什么是深拷贝,什么是浅拷贝

计算机科学中,特别是涉及到编程语言如JavaScript、Java、C++等时,我们经常遇到“深拷贝”和“浅拷贝”这两个概念。它们都与对象的复制有关,但处理方式不同。

浅拷贝 (Shallow Copy):

浅拷贝只复制对象的顶层属性(或称为“引用”),而不对其引用的对象进行复制。这意味着如果对象的某个属性值是另一个对象的引用,那么浅拷贝后,原对象和新对象将共享这个引用的对象。在JavaScript中,当你使用Object.assign()或扩展运算符(...)来复制对象时,你实际上是在进行浅拷贝。

let obj1 = { a: 1, b: { c: 2 } };  
let obj2 = { ...obj1 }; // 浅拷贝  
obj2.b.c = 3;  
console.log(obj1.b.c); // 输出 3,因为obj1和obj2的b属性指向同一个对象

深拷贝 (Deep Copy):

深拷贝会复制对象的所有属性,并递归地复制其引用的对象,直到最底层的基本数据类型。这样,原对象和新对象是完全独立的,修改新对象不会影响原对象。

在JavaScript中,没有内置的直接进行深拷贝的函数,但你可以使用JSON.parse(JSON.stringify(obj))(注意这个方法有局限性,比如不能处理函数、循环引用、特殊类型等)或递归遍历对象的每个属性来实现深拷贝

let obj1 = { a: 1, b: { c: 2 } };  
// 假设有一个deepCopy函数实现了深拷贝  
let obj2 = deepCopy(obj1); // 深拷贝  
obj2.b.c = 3;  
console.log(obj1.b.c); // 输出 2,因为obj1和obj2是完全独立的对象

区别:浅拷贝和深拷贝的主要区别在于它们处理对象引用的方式。浅拷贝只复制引用,而深拷贝会递归地复制引用的对象,直到最底层。

目录
相关文章
|
设计模式 存储 Java
深拷贝与浅拷贝,就是这么简单
深拷贝与浅拷贝,就是这么简单
|
运维 Python
【Python】python深拷贝与浅拷贝详解(必须掌握)
【Python】python深拷贝与浅拷贝详解(必须掌握)
|
9月前
|
前端开发 JavaScript Java
浅拷贝与深拷贝区别之技术方案及应用实例解析
本文详解浅拷贝与深拷贝的区别、技术实现及应用场景,涵盖JavaScript与Python示例,并探讨性能优化与组件封装策略,助你掌握对象复制核心技巧,避免数据引用问题。
287 2
|
存储 算法 C++
【c++丨STL】map/multimap的使用
本文详细介绍了STL关联式容器中的`map`和`multimap`的使用方法。`map`基于红黑树实现,内部元素按键自动升序排列,存储键值对,支持通过键访问或修改值;而`multimap`允许存在重复键。文章从构造函数、迭代器、容量接口、元素访问接口、增删操作到其他操作接口全面解析了`map`的功能,并通过实例演示了如何用`map`统计字符串数组中各元素的出现次数。最后对比了`map`与`set`的区别,强调了`map`在处理键值关系时的优势。
665 73
|
存储 编译器 C++
C++进阶之路:何为拷贝构造函数,深入理解浅拷贝与深拷贝(类与对象_中篇)
C++进阶之路:何为拷贝构造函数,深入理解浅拷贝与深拷贝(类与对象_中篇)
424 0
|
前端开发 JavaScript
什么是深拷贝;深拷贝和浅拷贝有什么区别;深拷贝和浅拷贝有哪些方法(详解)
浅拷贝适用于只复制对象的第一层属性,且这些属性不是引用类型。深拷贝适用于需要完全独立的副本,包括对象和数组的嵌套结构。选择哪种拷贝方式取决于你的具体需求和场景。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
PyTorch 算法框架/工具
【chat-gpt问答记录】torch.tensor和torch.Tensor什么区别?
【chat-gpt问答记录】torch.tensor和torch.Tensor什么区别?
593 2
|
安全 Java Spring
Spring框架中的单例Bean是线程安全的吗?
Spring框架中的单例Bean是线程安全的吗?
309 1
|
存储 NoSQL MongoDB
Redis在中国火爆,为何MongoDB更受欢迎国外?
本文介绍了Redis和MongoDB的基本概念及其在GitHub Star、DB-Engines Ranking和Google Trends中的数据对比。Redis是一个基于内存的键值对存储数据库,适合快速读写场景;MongoDB则是面向文档的数据库,支持大规模数据存储和复杂查询。全球范围内,MongoDB的搜索热度高于Redis,但在中国市场,Redis更受欢迎,因其高性能和低延迟特性满足了中国互联网公司对高并发的需求。总结部分分析了两者的特点及适用场景,并结合中美两国的行业背景解释了其受欢迎程度的不同原因。
467 1
|
安全 C语言
深拷贝和浅拷贝在 C 语言中的性能对比
在C语言中,深拷贝和浅拷贝的性能存在显著差异。浅拷贝仅复制指针,速度快但可能导致数据共享问题;深拷贝则复制整个数据结构,安全但耗时较长。选择合适的拷贝方式对性能优化至关重要。

热门文章

最新文章