草庐IT

深浅拷贝

胡墨 2023-04-09 原文
// 注意: 基本数据类型不存在深浅拷贝,只是值传递,复合数据类型才有深浅拷贝之说



        var obj1 = { name: "吴亦凡" };
        var obj2 = obj1;
        obj1.name = "罗志祥";

        // 相当于把obj1的指针复制了一份给了obj2,两个指针指向了堆内存中的一块内存地址,改变其中一个会影响另外一个(浅拷贝)
        // 复合数据类型直接赋值就是浅拷贝操作
        console.log(obj2.name);//罗志祥





        // 复制一个复合数据类型,改变其中一个,另一个不受影响,两个对象是独立的,这样的拷贝就是深拷贝
        var obj3 = { name: "李云迪" };
        var obj4 = {};
        for (const k in obj3) {
            // k===> "name"
            // obj4.name=obj3.name
            // obj4.name="李云迪"
            obj4[k] = obj3[k]
        }

        obj3.name="李易峰";
        console.log(obj4.name);//李云迪


        // 总结: 深拷贝和浅拷贝的区别?
            //  浅拷贝只是增加了一个指针,指向了已经存在的内存地址,如果原来的对象发生了变化,那么浅拷贝出来的对象也会改变
            // 深拷贝是申请了一块新的内存,增加了一个指针,两个指针指向不同的内存地址,两个对象互不影响

//  另一种说法
    // 浅拷贝(shallow copy):只复制指向某个对象的指针,而不复制这个对象本身,新旧对象共享一块内存。
    // 深拷贝(deep copy):复制并创建一个一模一样的对象,不共享内存,修改新对象旧对象不会变。


有关深浅拷贝的更多相关文章

  1. ruby - 为什么 Ruby 中没有深拷贝方法? - 2

    我正在研究技术图纸(svg/ruby)的解决方案。我想操作矩形,并且在这个类中有一个add!方法:classRectdefadd!(delta)@x1+=delta...#andsoonselfendend我还需要一个add方法返回一个Rect,但不操作self:defadd(delta)r=self.dup/clone/"copy"#dup和clone不做我的事但是:defcopy;Marshal.load(Marshal.dump(self));end会。为什么普通Ruby中不存在这样的基本功能?请不要告诉我我可以颠倒add和add!,让add完成工作,然后add!调用它。

  2. ruby-on-rails - Ruby 中数组的深拷贝 - 2

    我想在生产环境中获取一个对象,并将其精确复制(复制其内容)到另一个相同类型的对象。我尝试从ruby​​控制台以3种方式执行此操作,但均无效:假设您将tt作为要复制的第一个对象,并将tt2作为副本对象。我尝试的第一种方法是克隆数组tt2.patients=tt.urls.patientstt2.doctors=tt.segments.doctorstt2.hospitals=tt.pixels.hospitals我尝试的第二种方法是复制数组,这实际上与克隆数组相同:tt2.patients=tt.patients.duptt2.doctors=tt.doctors.duptt2.hosp

  3. 【JavaScript】手撕前端面试题:对象参数浅拷贝 | 简易深拷贝 | 完整深拷贝 - 2

    🖥️NodeJS专栏:Node.js从入门到精通🖥️博主的前端之路(源创征文一等奖作品):前端之行,任重道远(来自大三学长的万字自述)🖥️TypeScript知识总结:TypeScript从入门到精通(十万字超详细知识点总结)🧑‍💼个人简介:大三学生,一个不甘平庸的平凡人🍬👉你的一键三连是我更新的最大动力❤️!文章目录1、浅拷贝要求思路代码2、简易深拷贝要求思路代码3、完整深拷贝要求思路代码1、浅拷贝要求补全JavaScript代码,要求实现一个对象参数的浅拷贝并返回拷贝之后的新对象。注意:参数可能包含函数、正则、日期、ES6新对象是对对象的参数进行浅拷贝,并不是直接对整个对象进行浅拷贝(整个

  4. ruby-on-rails - 如何在 Ruby 中创建对象的深拷贝? - 2

    我做了一些搜索,发现了一些关于创建深复制运算符的不同方法和帖子。在Ruby中是否有快速简单(内置)的深度复制对象的方法?这些字段不是数组或散列。使用Ruby1.9.2。 最佳答案 普通Ruby中并未内置深拷贝,但您可以通过编码和解码对象来破解它:Marshal.load(Marshal.dump(@object))但这并不完美,并且不适用于所有对象。更稳健的方法:classObjectdefdeep_clonereturn@deep_cloning_objif@deep_cloning@deep_cloning_obj=clone@

  5. javascript - forEach 在循环之前是否创建数组的深拷贝? - 2

    举个例子arr1=[{b:2},{a:1}]//anarraywith2elementsarr1.forEach(function(element,index,array){console.log(element);console.log('of');console.log(array);console.log('');arr1.push({c:3});});console.log(arr1);结果{b:2}of[{b:2},{a:1}]{a:1}of[{b:2},{a:1},{c:3}][{b:2},{a:1},{c:3},{c:3}]在上面的示例中,我正在遍历一个数组并向其添加更多

  6. javascript - 使用 jQuery 的 DOM 元素的非深拷贝 - 2

    是否可以在不克隆其内容的情况下在jQuery中创建DOM元素的克隆/副本?我需要将一个div的内容拆分为两个具有相同属性的独立div。因此,例如我需要更改:thisisthefirstsentence.thisisthesecondsentence.变成类似的东西:thisisthefirstsentence.thisisthesecondsentence.具体如何拆分内容比较复杂,但这基本上就是我需要做的。显然,可以使用以下方法创建没有内容的克隆:$(el).clone().empty();但由于我的元素可能变得相当大,我想摆脱不必要地克隆元素内容的开销。想法?谢谢!

  7. javascript - 对于 JavaScript 多维数组的深拷贝,深入一层似乎就足够了。这是真的吗? - 2

    注意:我只是一个编码新手,所以这个问题的核心可能存在明显的错误或误解。本质上,我需要在JavaScript中“按值”深度复制多维数组到未知深度。我原以为这需要一些复杂的递归,但似乎在JavaScript中您只需要深复制一个级别就可以按值复制整个数组。举个例子,这是我的测试代码,使用了一个故意复杂的数组。functiontest(){vararr=[['ok1'],[],[[],[],[[],[[['ok2'],[]]]]]];varcloned=cloneArray(arr);arr='';//Deletetheoriginalalert(cloned);}functioncloneA

  8. javascript - 浅拷贝对象遗漏了 ES6/ES7 中的一个或多个属性? - 2

    这就是我一直在做的:varprops={id:1,name:'test',children:[]}//copypropsbutleavechildrenoutvarnewProps={...props}deletenewProps.childrenconsole.log(newProps)//{id:1,name:'test'}有没有更干净、更简单的方法? 最佳答案 你可以使用destructuringassignment:varprops={id:1,name:'test',children:[]}var{children:_,.

  9. javascript - 结构化克隆算法与深拷贝有何不同 - 2

    有一个MDNarticle声明:ThestructuredclonealgorithmisanewalgorithmdefinedbytheHTML5specificationforserializingcomplexJavaScriptobjects.It'smorecapablethanJSON所以,我相信这意味着它比以这种方式克隆的能力更强:JSON.parse(JSON.stringify(obj))在thisthread中建议.JSON方式有很多缺点,例如不支持循环引用、丢弃JSON规范不支持的所有内容(如函数)以及将Date对象表示为字符串。然后我想到结构化克隆算法是很多库

  10. javascript - ES6 React - 引用、浅拷贝和深拷贝有什么区别以及如何比较它们? - 2

    我知道这个问题已经被讨论了很多次,我想我已经有了一个基本的想法。我从StackOverflow找到了一些评分最高的答案:Whatisthedifferencebetweenadeepcopyandashallowcopy?DeepCopyandShallowCopy但所有的答案对我来说似乎都很模糊。让我们考虑以下示例:constuser={name:"James",age:33,highlights:{career:"Basketballplayer",NBAChampion:[2012,2013,2016],},promotion:()=>("GetLeBron15now!"),};

随机推荐