简述深浅拷贝原理(代码片段)

liveoutfun liveoutfun     2023-01-02     720

关键词:

 //数组浅拷贝
         var arr=["xjz","is","a","superman"];

         //slice
         
         var new_arr=arr.slice();

         new_arr[0]="zxb";

         console.log("before:"+arr);

         console.log("after:"+new_arr);
         


         //concat
         

         var new_arr=arr.concat();

         new_arr[0]="bb";


          console.log("before:"+arr);

          console.log("after:"+new_arr);

//这个方法只能是拷贝基本类型 如果数组项是引用类型的话 只会拷贝引用
//所以当以后改变这个引用的时候 都会发生改变 很麻烦
//只是适用于存储基本类型的数组的拷贝

   //深拷贝
           //如果只是简单地数据类型 可以json解析
           //function undefined null NAN Infinity 拷贝不了

          var json=["xjz","super","man",
                
                "age":12,
                "name":"xjz"

          ,function()return "dadada",undefined,null,NaN,Infinity];

         
          var newJSON=JSON.parse(JSON.stringify(json));

 

所以还需要自己写一个拷贝  啊哈哈哈哈哈
 

 //for in 不可以获取不可枚举的属性
 //hasOwnProperty 会忽略原型链上的属性
 //Object.getOwnPropertyNames 可以获取可枚举和不可枚举的属性
 //深拷贝

 

function deepCopy(obj)
                  
             if(!(obj && typeof obj==="object"))

                        return;
                 

               else

                  var copyResult = obj instanceof Array ?[]:;

                     for(var key in obj)
                           
                        if(obj.hasOwnProperty(key))

                           copyResult[key]=typeof obj[key] ==="object"?deepCopy
                           (obj[key]):obj[key];

                         

                     

                

            return copyResult;

        


      var obj=

          "data":["age":12,"name":"xjz", 

           "adress":"ChangChun"],

            callBack:function()
              
              console.log("my love is zxb");

          

      ;

 

javascript数组对象的浅拷贝与深拷贝深浅拷贝的区别+图解原理(代码片段)

...的数据处理。而其中比较常见也很经典的问题便是数据的深浅拷贝。首先解释一下深浅拷贝出错会导致什么样的结果你发现上一行代码打印出来的值是正确的,但是下一行就不对了,或者单个的数据打印是正确的,一... 查看详情

python开发--10深入浅出(代码片段)

文章目录引入1.为什么要使用深浅拷贝一.赋值操作1.赋值操作原理2.示例3.总结二.浅拷贝1.浅拷贝原理2.示例3.浅拷贝方法总结4.总结三.深拷贝1.深拷贝原理2.示例3.总结引入1.为什么要使用深浅拷贝涉及到容器类型的修改操作时,想... 查看详情

生成器和迭代器,深浅拷贝(代码片段)

一、迭代器对于Python列表的for循环,他的内部原理:查看下一个元素是否存在,如果存在,则取出,如果不存在,则报异常 StopIteration。(python内部对异常已处理)classlistiterator(object)|Methodsdefinedhere:||__getattribute__(...)|x.__getattr... 查看详情

如何实现一个深浅拷贝(代码片段)

在开始之前,先抛出来两个问题,思考一下。拷贝一个很多嵌套的对象怎么实现?在面试官眼中,写成什么样的深拷贝代码才能算合格?带着这两个问题,我们先来看下浅拷贝的相关内容。浅拷贝的原理和实现... 查看详情

python深浅拷贝(代码片段)

查看详情

什么是深浅拷贝?如何实现深浅拷贝(代码片段)

什么是深浅拷贝?如何实现深浅拷贝首先,先了解深浅拷贝的含义:浅拷贝就是通过赋值的方式进行拷贝,那为什么说这是浅拷贝呢?就是因为赋值的方式只会把对象的表层赋值给一个新的对象,如果里面... 查看详情

深浅拷贝(代码片段)

深拷贝和浅拷贝1、浅拷贝只是拷贝一层,更深层次对象级别的只拷贝引用。2、深拷贝拷贝多层,每一级别的数据都会拷贝。3、Object.assign(target,...sources):ES6新增方法可以浅拷贝。推荐这种方法。1<!DOCTYPEhtml>2<html>3<he... 查看详情

全栈开发六深浅拷贝(代码片段)

深浅拷贝深浅拷贝的前提:  相等和相同的关系深浅拷贝针对的是列表等可变的数据类型。深浅拷贝在普通的列表没有什么意义,只有在嵌套列表,或其他嵌套数据类型才有意义。1a="aaa"2a1="aaa"3b=a4print(a==a1)5print(id(a),id(a1),id(b))... 查看详情

javascript专题深浅拷贝(代码片段)

JavaScript专题之深浅拷贝了解拷贝背后的过程,避免不必要的错误,Js专题系列之深浅拷贝,我们一起加油~目录一、拷贝示例二、浅拷贝三、深拷贝的方法?四、自己实现深浅拷贝一、拷贝示例当我们在操作... 查看详情

深浅拷贝区别与应用(代码片段)

...用数据类型,对于基本数据类型的拷贝,并没有深浅拷贝的区别,我们所说的深浅拷贝都是对于引用数据类型而言的。浅拷贝浅拷贝的意思就是只复制引用,而未复制真正的值constoriginArray=[1,2,3,4,5];constoriginObj&#... 查看详情

深浅拷贝(代码片段)

浅拷贝:只拷贝一层1s2=[‘alex‘,1,(1,2,3)]2s3=s2.copy()3print(s3)45s2[0]=‘conghui‘6print(s2)7print(s3)89夫妻银行关联账户10husband=[‘xiaochen‘,159,[15000,9000]]11wife=husband.copy()12print(wife)13wife[0]=‘conghui‘14wife[ 查看详情

深浅拷贝(代码片段)

1、ES6的扩展运算符:实现深拷贝2、JSON.parse(JSON.stringify(js对象)):实现深拷贝  该方法存在弊端,如果JS对象中存在有时间对象,则JSON.stringify后再JSON.parse的结果,时间将只是字符串的形式。而不是时间对象;vartest=name:‘a‘,da... 查看详情

简述深浅拷贝

参考技术A浅拷贝顾名思义拷的比较浅,浅到只有引用类型的第一层数据才能被拷贝,第二层的数据修改会改变原来的数组浅拷贝的几种方法:for循环concatletarr=[1,2,3,4]letcloneArr=[]for(leti=0;i<arr.length;i++)   cloneArr.push(arr[i... 查看详情

深浅拷贝(代码片段)

浅拷贝:只拷贝第一层,第一层的数据独立,其他数据共用深拷贝:相当于克隆一份,各自所有数据独立 1.浅拷贝,直接使用copy由下面的例子可以看出,修改各自独立的数据,原数据和拷贝后的互不影响,但是修改共用的数... 查看详情

深浅拷贝(代码片段)

浅拷贝:只考贝第一层1a=[[1,2],3,4]2b=a.copy()3b[1]=994print(a,b)5b[0][1]=886print(a,b)78[[1,2],3,4][[1,2],99,4]9[[1,88],3,4][[1,88],99,4] 1husband=["xiaohu",123,[15000,9000]]23wife=husband.copy()4wife[0]=" 查看详情

深浅拷贝(代码片段)

 importcopy"""浅拷贝只拷贝外层地址,内容受外层地址内容的改变而改变;深拷贝是复制内容到一个新的地址,内容不受拷贝对象的更改而更改"""a=[11,22]b=[33,44]c=[a,b]#产生一个新的idd=copy.copy(c)#复制c的外层a,b的地址e=copy.deepcopy(c)... 查看详情

深浅拷贝(代码片段)

赋值:没有创建新的对象,多个变量指向一个对象,与拷贝无关a=[1,2,3,[4,5]]b=aprint(a,id(a))#[1,2,3,[4,5]]1807996384072print(b,id(b))#[1,2,3,[4,5]]1807996384072a.pop()print(a,id(a))#[1,2,3]1807996384072print(b,id(b))#[1,2,3]18079963 查看详情

深浅拷贝与string类(代码片段)

深浅拷贝深拷贝的就是多层拷贝对象或数组中的数据,浅拷贝的话就是拷贝一层数据1、浅拷贝浅拷贝就是只是把另一个变量的值拿过来;intmain() test::strings1("helloworld!"); test::strings2(s1); s2[0]='x'; cout<<s1.c_... 查看详情