深拷贝和浅拷贝、及实现方式

简介: 深拷贝和浅拷贝、及实现方式
  • 直接赋值复制:

理解:两个相同的类对象赋值的话,复制的是引用,如将 a2 赋值给 a1(A a1 = a2),则两个变量指向同一个对象,所以当 a1 变化时,a2 也会变化;反之当 a2 变化时,a1 也会变化。

image.png

  • 浅拷贝:

理解:创建一个新对象,将当前对象的非静态字段复制到该新对象,如果是基本数据类型,复制值;如果是引用数据类型,复制引用但不复制引用的对象两个对象的地址指向的是同一个地址

image.png

  • 深拷贝:

理解:深拷贝复制的不只是对象本身,还有对象包含的引用指向的所有对象,即创建一个相同的对象,但两个对象是单独分开的,各自指向各自的地址

image.png

 

  • 内存四大组成部分:栈区、堆区、全局 / 静态区、只读区
  1. 栈区:

存放数据:局部参数、形参

  1. 堆区:

存放数据:new 出来的数据

  1. 全局 / 静态区:

存放数据:全局变量和静态变量

  1. 只读区:

存放数据:常量

image.png

总结:

浅拷贝:复制引用但不复制引用的对象也就是简单的把栈中的引用地址拷贝了一份,当修改新拷贝的值的时候,被拷贝的对象也会被修改

实现:正常的赋值就是浅拷贝。

深拷贝:复制引用并且复制引用的对象(深拷贝的话会在堆内存中为新对象建立空间,也就是两个对象拥有各自的地址。

实现:最常用的是使用递归的方式实现,也可以使用 JSON、Object.assgin、MessageChannel 实现

深拷贝的实现方式(超全) - 掘金 (juejin.cn)

相关文章
|
JSON Java API
深拷贝、浅拷贝
深拷贝、浅拷贝
86 0
|
JavaScript 前端开发 Python
故事会【深拷贝和浅拷贝】
故事会【深拷贝和浅拷贝】
|
7月前
|
存储 人工智能 前端开发
深拷贝浅拷贝的区别?如何实现一个深拷贝?
深拷贝浅拷贝的区别?如何实现一个深拷贝?
110 0
|
2月前
|
存储 前端开发 JavaScript
浅拷贝和深拷贝的区别?
本文首发于微信公众号“前端徐徐”,介绍了JavaScript中浅拷贝和深拷贝的概念及其实现方法。文章首先解释了数据类型的基础,包括原始值和对象的区别,然后详细介绍了浅拷贝和深拷贝的定义、底层逻辑以及常见的实现方式,如 `Object.assign`、扩展运算符、`JSON.stringify` 和手动实现等。最后,通过对比浅拷贝和深拷贝的区别,帮助读者更好地理解和应用这两种拷贝方式。
91 0
浅拷贝和深拷贝的区别?
|
6月前
|
安全 Java
深拷贝和浅拷贝的区别
深拷贝和浅拷贝的区别
|
7月前
什么是深拷贝和浅拷贝哇
什么是深拷贝和浅拷贝哇
|
7月前
|
JavaScript 前端开发
浅拷贝和深拷贝
浅拷贝和深拷贝
52 2
|
存储 JavaScript 前端开发
深拷贝浅拷贝有什么区别?怎么实现深拷贝?
深拷贝浅拷贝有什么区别?怎么实现深拷贝?
102 0
深拷贝和浅拷贝
类里面会为我们实现默认的拷贝,这个做的是值的拷贝,但是假如对象里的数据成员在堆上开辟了内存资源,如果继续浅拷贝就会导致两根指针指向同一块资源,从而产生内存泄漏问题。但是深拷贝可以解决这个问题,本文将详细介绍深拷贝与浅拷贝。
|
JavaScript 前端开发
数组和对象的浅拷贝,深拷贝
数组和对象的浅拷贝,深拷贝
数组和对象的浅拷贝,深拷贝