深拷贝与浅拷贝

深拷贝与浅拷贝

技术杂谈小彩虹2021-07-12 16:08:06100A+A-

深拷贝

深拷贝是将一个对象从内存中完整的拷贝一份出来,从堆内存中开辟一个新的区域存放新对象,且修改新对象不会影响原对象。

深拷贝代码:

    let arr1=[1,2,3,{
            username:'ywt'
        }];
        let arr2=JSON.parse(JSON.stringify(arr1));
        arr2[3].username='zgy';
        console.log(arr1,arr2);
             // arr1                     arr2
    //    (4) [1, 2, 3, {…}]         (4) [1, 2, 3, {…}]
    //     0: 1                          0: 1 
    //     1: 2                          1: 2
    //     2: 3                          2: 3
    //     3: {username: "ywt"}          3: {username: "zgy"}
    //     length: 4                     length: 4
    //     __proto__: Array(0)           __proto__: Array(0)   

浅拷贝

浅拷贝是创建一个新对象,这个对象有着原始对象属性值的一份精确拷贝。如果属性是基本类型,拷贝的就是基本类型的值,如果属性是引用类型,拷贝的就是内存地址 ,所以如果其中一个对象改变了这个地址,就会影响到另一个对象。

浅拷贝代码:

 let obj1={
            person:{
                name:'YY',
                age:21
            },
            sports:'basketball'
        };
        let obj2=Object.assign({},obj1);
        obj2.person.name='ZZ';
        obj2.sports='football';
        console.log(obj1);//person: {name: "ZZ", age: 21}sports: "basketball"

总之,深拷贝会另外创造一个一模一样的对象,新对象跟原对象不共享内存,修改新对象不会改到原对象。浅拷贝只复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存。

深度优先遍历(DFS)

深度优先搜索在搜索过程中访问某个顶点后,需要递归地访问此顶点的所有未访问过的相邻顶点。

  • 若该相邻节点未被访问,则对其进行标记,并进入递归,查找它的未被标记访问的邻接节点;若该节点已被访问标记,则回退到上级节点,查找它未被标记访问的邻接节点,再进入递归,直到与起点相通的全部顶点都被标记访问为止。
  • 若所有节点都被标记访问,就结束;反之,如果还有节点未被访问,则需要以该节点为顶点进行下一步的递归查找,直到所有点都被标记访问。

广度优先遍历(BFS)

广度优先遍历,又称为"宽度优先搜索"或"横向优先搜索",简称 BFS。它的实现思想是:从一点出发,查出它的邻接节点放入队列并标记,然后从队列中弹出第一个节点,寻找它的邻接未被访问的节点放入队列,直至所有已被访问的节点的邻接点都被访问过;若图中还有未被访问的点,则另选一个未被访问的点出发,执行相同的操作,直至图中所有节点都被访问。

点击这里复制本文地址 以上内容由权冠洲的博客整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!

支持Ctrl+Enter提交

联系我们| 本站介绍| 留言建议 | 交换友链 | 域名展示
本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除

权冠洲的博客 © All Rights Reserved.  Copyright quanguanzhou.top All Rights Reserved
苏公网安备 32030302000848号   苏ICP备20033101号-1

联系我们