对于深拷贝与浅拷贝的理解

简介: 对于深拷贝与浅拷贝的理解

最近在做项目的时候遇到一些深拷贝浅拷贝的一些问题,跟着同事学习了下在这里分享一些心得。

深浅拷贝用的是前端lodash的库

先上代码:

<template>
  <div class="">对于深拷贝浅拷贝的练习</div>
</template>
<script>
import _ from "lodash";
import object from "element-resize-detector/src/detection-strategy/object";
export default {
  components: {},
  data() {
    return {};
  },
  created() {},
  mounted() {
    let a1 = {
      name: "a1",
      age: 40,
      children: {
        name: "a11",
        age: 12,
      },
    };
    let a2 = {
      name: "a1",
      age: 40,
      children: {
        name: "a11",
        age: 12,
      },
    };
    let a3 = a1;
    //这里浅拷贝用的es6内置方法,可以用lodash的_.deep也是一样
    let a4 = Object.assign({}, a1);
    let a5 = _.cloneDeep(a1);
    console.log("a2是否等于a1", a1 == a2, a1 === a2,a1.children==a2.children,a1.children===a2.children);
    console.log("a3是否等于a1", a1 == a3, a1 === a3,a1.children==a3.children,a1.children===a3.children);
    console.log("a4是否等于a1", a1 == a4, a1 === a4,a1.children==a4.children,a1.children===a4.children);
    console.log("a5是否等于a1", a1 == a5, a1 === a5,a1.children==a5.children,a1.children===a5.children);
  },
  watch: {},
  computed: {},
  methods: {},
};
</script>
<style lang="scss" scoped>
</style>

然后上结果:


第一条结果:因为a1,a2各自声明,故所在内存地址肯定不一样,故全是false

第二条结果:a3是直接赋值a1的结果,两者指向的内存地址一样,修改a3任意属性a1都会改变,故全是true。

第三条结果:a4是我们浅拷贝a1来的值,浅拷贝只拷贝根节点的属性,子节点的内存地址不变和  原来一样,我们修改a4根节点的name看a1的name不会变,但是我们更改a4的子节点的name,a1的子节点name会跟着变,所以前两个是false,后两个是true。

第四条结果:a5是我们深拷贝的结果,不光拷贝根节点,还会拷贝子节点,子节点的再子节点,故内存地址都是不一样的,所以结果全是false。

我是小丁,

祝你牛逼

相关文章
|
6月前
|
设计模式 存储 Java
深拷贝与浅拷贝,就是这么简单
深拷贝与浅拷贝,就是这么简单
|
存储 Cloud Native Linux
C++ 深拷贝浅拷贝
C++ 深拷贝浅拷贝
|
JSON Java API
深拷贝、浅拷贝
深拷贝、浅拷贝
81 0
|
JavaScript 前端开发 Python
故事会【深拷贝和浅拷贝】
故事会【深拷贝和浅拷贝】
|
1月前
|
JavaScript 前端开发 Java
什么是深拷贝,什么是浅拷贝
什么是深拷贝,什么是浅拷贝
45 0
|
6月前
什么是深拷贝和浅拷贝哇
什么是深拷贝和浅拷贝哇
|
C++
22 C++ - 深拷贝和浅拷贝
22 C++ - 深拷贝和浅拷贝
46 0
|
编译器 C++
C++中的深拷贝和浅拷贝介绍
对于基本类型的数据以及简单的对象,它们之间的拷贝非常简单,就是按位复制内存。例如: class Base{ public: Base(): m_a(0), m_b(0){ } Base(int a, int b): m_a(a), m_b(b){ } private: int m_a; int m_b; }; int main(){ int a = 10; int b = a; //拷贝 Base obj1(10, 20);
122 0
|
Java
浅拷贝与深拷贝
浅拷贝与深拷贝
84 0
深拷贝和浅拷贝
类里面会为我们实现默认的拷贝,这个做的是值的拷贝,但是假如对象里的数据成员在堆上开辟了内存资源,如果继续浅拷贝就会导致两根指针指向同一块资源,从而产生内存泄漏问题。但是深拷贝可以解决这个问题,本文将详细介绍深拷贝与浅拷贝。