zoukankan      html  css  js  c++  java
  • 深拷贝和浅拷贝

    不知道各位有没有玩过DOTA,在DOTA里有两个英雄,地卜和猴子,地卜的所有的分身共用同一个生命,一旦一个分身死掉,地卜剩下的人全部死掉,而猴子的分身,每个分身都有自己命,一个分身没了没关系。

    而浅拷贝就是地卜,浅拷贝只复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存。

    深拷贝会创造一个一模一样的对象。

    var a = 10;
    var b = a;
    b = 20;
    console.log(a); //10
    console.log(b); //20
    //修改a 的时候不会修改b
    var obj1 = {
    a: 10,
    b: 20,
    c: 30
    };
    var obj2 = obj1;
    obj2.b = 100;
    console.log(a);
    //{a:10 , b:100 , c:30}
    console.log(b);
    //{a:10 , b:100 , c:30}
    这里复制一份obj叫做obj2, 这里修改了obj2的b为100 同时也修改了obj1.b。 因为他们本来就是一个对象 这就是所谓的浅拷贝。

    var boj1 = {a:10 , b:20 , c:30};
    var obj2 = {a:boj1.a ,b:boj1.b , c:boj1.c }
    obj2.b = 100;
    console.log(obj1);
    //{a:10 , b:20 , c:30}
    console.log(obj2);
    //{a:10 , b:100 , c:30}
    这就是深拷贝 不会改到原来的obj1。

    let obj1 = {a: 0,b: {c: 0}};
    let obj2 = Object.assign({}, obj1);
    console.log(JSON.stringify(obj2)); // { a: 0, b: { c: 0}}


    obj1.a = 1;
    console.log(JSON.stringify(obj1)); // { a: 1, b: { c: 0}}
    console.log(JSON.stringify(obj2)); // { a: 0, b: { c: 0}}
    因为obj2.a属于深拷贝


    obj2.a = 2;
    console.log(JSON.stringify(obj1)); // { a: 1, b: { c: 0}}
    console.log(JSON.stringify(obj2)); // { a: 2, b: { c: 0}}
    一样因为obj2.a属于深拷贝


    obj2.b.c = 3;
    console.log(JSON.stringify(obj1)); // { a: 1, b: { c: 3}}
    console.log(JSON.stringify(obj2)); // { a: 2, b: { c: 3}} 

    因为 Object.assign()拷贝的是属性值。假如源对象的属性值是一个对象的引用,那么它也只指向那个引用。

    所以obj2.b.c属于浅拷贝,和obj1.b.c指向同一个内存空间。

    obj4 = {a: 0,b: {c: 0}};
    let obj3 = JSON.parse(JSON.stringify(obj4));
    obj4.a = 4;
    obj4.b.c = 4;
    console.log(JSON.stringify(obj3));

    这里JSON.parse把JSON.stringify(obj4)给深拷贝了。所以obj3和obj4没关系。

  • 相关阅读:
    番外篇:生产要素最适投入分析(Optimum input of factors)
    docker 9 :镜像存储机制
    docker 8 : 容器资源限制管理
    docker 7 :docker基本操作
    docker 6:容器之间共享磁盘
    docker 5 :挂载的方式
    docker 4 : 容器数据卷使用
    docker 3:创建镜像
    docker 2:Docker镜像增删改查
    docker 1:Docker安装(CentOS8.0)
  • 原文地址:https://www.cnblogs.com/qrf1997/p/11211744.html
Copyright © 2011-2022 走看看