首页 > 其他分享 >深拷贝与浅拷贝

深拷贝与浅拷贝

时间:2023-11-22 15:04:31浏览次数:31  
标签:console log three four var 拷贝

浅拷贝与深拷贝

 

深拷贝

基本数据类型都是深拷贝 a=b 改变a的值 b不会改变

浅拷贝

引用数据类型都是浅拷贝a=b 改变a的值 b也会改变

想把浅拷贝改为深拷贝用for 或者...拓展运算符

 

注意 此方法只能是数组中是基本数据类型

  要想把数组中引用数据类型 改变

 要用递归

 

for (var i = 0; i < three.length; i++) {

        //     four.push(three[i]);

 

        // }

        // console.log(three, four);

        // three[1] = 6;

        // console.log(three, four);

 

 

递归 改变浅拷贝

  var person1 = ['章三', 18, ['篮球', '足球', '羽毛球']];

        var person2 = [];

        // p要拷贝的数据;c 生成的新数组

        function Copy(p, c) {

            var c = c || {};

            for (var i in p) {

                if (typeof p[i] === "object") {

                    c[i] = (p[i].constructor === Array) ? [] : {}

                    Copy(p[i], c[i]);

                } else {

                    c[i] = p[i]

                }

            }

            return c;

        }

        person2 = Copy(person1, person2);

        person1[0] = '李四'

        person1[2][0] = '李四'

        console.log(person1);

        console.log(person2);

 


// 基本数据类型都是深拷贝 深拷贝为 a=b 改变a的值 b不会改变; // var one = 1; // var two = one; // console.log(one, two); // one = 2; // console.log(one, two); // 引用数据类型都是浅拷贝 浅拷贝为 a=b 改变a的值 b会改变; // var three = [1, 2, 3]; // var four = []; // console.log(three, four); // three[1] = 6; // console.log(three, four); //想要把浅拷贝改为深拷贝 //要用for 或...扩展运算符 但是这个只能是数组中是基本数据类型时才能使用 // for (var i = 0; i < three.length; i++) { // four.push(three[i]); // } // console.log(three, four); // three[1] = 6; // console.log(three, four); // 如果数组中又包含数组 可以用递归 // var three = ['章三', 18, ['篮球', '足球', '羽毛球']]; // var four = []; // function Copy(a, c) { // // 判断p有没有被调用; // var c = c || {}; // for (var i in a) { // if (typeof (a[i] === "Object")) { // c[i] = (a[i].constructor === Array) ? [] : {}; // Copy(a[i], c[i]); // } else { // c[i] = a[i] // } // } // return c; // } // four = Copy(three, four); // three[1] = 'one'; // three[3][0] = 7 // console.log(four); // console.log(three); var person1 = ['章三', 18, ['篮球', '足球', '羽毛球']]; var person2 = []; // p要拷贝的数据;c 生成的新数组 function Copy(p, c) { var c = c || {}; for (var i in p) { if (typeof p[i] === "object") { c[i] = (p[i].constructor === Array) ? [] : {} Copy(p[i], c[i]); } else { c[i] = p[i] } } return c; } person2 = Copy(person1, person2); person1[0] = '李四' person1[2][0] = '李四' console.log(person1); console.log(person2);

 

标签:console,log,three,four,var,拷贝
From: https://www.cnblogs.com/liu521125/p/17849004.html

相关文章

  • 痞子衡嵌入式:在IAR开发环境下手动拷贝自定义程序段到RAM中执行的方法
    大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家分享的是IAR下手动拷贝自定义程序段到RAM中执行的方法。在痞子衡旧文《IAR下RT-Thread工程自定义函数段重定向失效分析》里,我们知道IAR链接器处理自定义程序段重定向是有一些限制的,只要用户重写了底层__low_l......
  • js深拷贝function
    js拷贝函数怎么操作使用bind()方法JavaScript的函数提供了bind()方法,可以用来创建一个新函数,该函数与原函数具有相同的代码,但其上下文和部分参数可以绑定。通过使用空的上下文和参数,可以实现函数的拷贝。functionoriginalFunction(){console.log("Originalfunction")......
  • 【3.0】Python中级之深浅拷贝
    【一】深浅拷贝问题引入无论深拷贝还是浅拷贝都是用来复制对象的如果是浅copy,只会复制一层,如果copy的对象中有可变数据类型,修改可变数据类型还会影响拷贝的对象如果是深copy,完整复制,无论可变或不可变,都是创建出新的来,以后再改原对象,都不会对copy出的对象造成影响在Py......
  • 11.1 文件拷贝移动与删除
    在编程中,针对磁盘与目录的操作也是非常重要的,本章将重点介绍如何实现针对文件目录与磁盘的操作方法,其中包括了删除文件,文件拷贝,文件读写,目录遍历输出,遍历磁盘容量信息,磁盘格式化,输出分区表数据,监控目录变化等。11.1CopyFileCopyFile函数,用于将一个文件从一个位置复制到另一个......
  • python 赋值、浅拷贝、深拷贝的区别
    b=a: 赋值引用,a和b都指向同一个对象。b=a.copy(): 浅拷贝,a和b是一个独立的对象,但他们的子对象还是指向统一对象(是引用)。b=copy.deepcopy(a): 深度拷贝,a和b完全拷贝了父对象及其子对象,两者是完全独立的。对于可变的序列,切片操作符:是浅拷贝 比如:a=b[:]......
  • js 对象深拷贝
    functiondeepObj(obj){vardest={};for(varkeyinobj){if(typeofobj[key]==='object'){dest[key]=obj[key].constructor===Array?[]:{};deepObj(dest[key],obj[key]);}else{dest[......
  • ubuntu cp拷贝文件夹报错“文件系统不支持符号链接”的解决方案
    出现这个问题,说明待拷贝的文件夹内部有不支持拷贝的文件格式,要解决这个问题可以转换一下思路:将文件夹压缩为压缩包——>拷贝压缩包到指定位置——>解压,命令如下(这里以zip压缩解压为例):#压缩文件夹,FileName.zip指的是你要压缩成的压缩包名字,DirName指的是要压缩的文件夹sudo......
  • jenkins编译——拷贝、停止、启动服务命令
    在编译后步骤,即poststeps新增执行shell窗口:(1)拷贝jar包,从编译的工作目录拷贝到要启动服务的目录注意,若jenkins服务器与服务部署不是同个服务器,还需要新增ssh选择对应的服务器,前提是已经将服务器信息配置到全局设置里cp$WORKSPACE/工作目录.jar/服务目录/.jar(2)杀掉已启动的......
  • 浅拷贝和深拷贝
    浅拷贝和深拷贝深拷贝(DeepCopy)和浅拷贝(ShallowCopy)是在编程中用来复制数据结构的两个概念。它们在复制数据时的行为和效果有所不同:浅拷贝(ShallowCopy):浅拷贝创建了一个新的数据结构,该数据结构的内容与原始数据结构相同。然而,对于数据结构中包含的对象(如列表、字典、类实例等),......
  • Java复制文件的4种方式及拷贝文件到另一个目录下的实例代码
    尽管Java提供了一个可以处理文件的IO操作类。但是没有一个复制文件的方法。复制文件是一个重要的操作,当你的程序必须处理很多文件相关的时候。然而有几种方法可以进行Java文件复制操作,下面列举出4中最受欢迎的方式。1.使用FileStreams复制这是最经典的方式将一个文件的内容复......