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

深拷贝和浅拷贝

时间:2023-06-20 15:24:25浏览次数:72  
标签:对象 newObj oldObj JSON 数组 拷贝

(1)浅拷贝【新旧对象共享同一块内存】

  • 创建新对象

    • 基本类型:拷贝基本类型的值

    • 引用类型:拷贝指针(内存地址),不拷贝对象本身,其中一个对象改变地址,影响另一个对象

  • 方法:

    • for-in遍历对象

    • 展开运算符 ...

    • Object.assign()

    • 使用lodash提供的函数 _.clone()

(2)深拷贝【新对象与原对象不共享内存】

  • 完整拷贝对象,堆内存中开辟新区域,修改新对象不会影响原对象

  • 方法:

    【npm install loadsh】

    • 使用lodash提供的函数 _.cloneDeep()

          

     

    • 使用递归函数完成

    • function deepClone(oldObj) {
      // 判断当前要拷贝的是数组还是对象,新建空对象或者空数组
      var newObj = Array.isArray(oldObj) ? [] : {}
      // 只能使用for-in,既可以遍历数组,也可以遍历对象
      for (var k in oldObj) {
      // console.log(k, oldObj[k])
      // 要被每一项放入到创建的新对象(数组)
      // 如果是原始类型的值,直接放入到新对象(数组),否则是引用类型的值,进行递归拷贝
      if (typeof oldObj[k] === 'object') {
      newObj[k] = deepClone(oldObj[k])
      } else {
      newObj[k] = oldObj[k]
      }
      }
      // 最后返回新对象(数组)
      return newObj
      }
    • 使用JSON对象,先转字符串再转对象,JSON.parse(JSON.stringify())

              

标签:对象,newObj,oldObj,JSON,数组,拷贝
From: https://www.cnblogs.com/le-cheng/p/17493704.html

相关文章

  • js递归简易深拷贝
    letobj={a:1,b:{b1:1,b2:2},c:[1,2,3]}functiondeepClone(obj){letresult=Array.isArray(obj)?[]:{}for(letkeyinobj){if(obj.hasOwnProperty(key)){if(obj[key]&&typeofobj[key]==&......
  • java中的深拷贝和浅拷贝、Object类中的clone()
    概念浅拷贝:复制基本数据类型的值,以及实例对象的引用地址,拷贝出来的对象,内部类属性指向的是同一个对象深拷贝:即会拷贝基本数据类型的值,也会针对实例对象的引用地址所指向的对象进行复制,拷贝出来的对象,内部类属性指向的不是同一个对象。Object类中的clone()方法。默认是浅拷贝......
  • 调用拷贝构造函数的场景
    1.默认构造函数默认构造函数是一个系统生成的,参数列表和函数体都为空的函数。如果类中声明了默认构造函数(无论是否有参数),编译器便不再会为之生成隐含的构造函数。2.析构函数析构函数的函数列表为空,因此不能实现重载。可以显式调用析构函数。例如可以通过对象名等进行调用,obj......
  • Java对象拷贝MapStruct
    介绍编译期即可生成对象复制代码。简单理解,功能定位org.springframework.beans.BeanUtils。官网,GitHub-MapStruct。入门maven项目引入依赖:mapstruct:包含必要注解,如@Mappingmapstruct-processor:注解处理器,根据注解自动生成mapper实现<dependency><groupId>org.mapstruct</group......
  • Python 深浅拷贝
    Python深浅拷贝一、数字、字符串对于数字和字符串而言,赋值、浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址。importcopy##########数字、字符串#########n1=123#n1="evescn"print(id(n1))###赋值##n2=n1print(id(n2))###浅拷贝##n2......
  • 深拷贝和浅拷贝
    深拷贝和浅拷贝浅拷贝指拷贝原始对象中所有的非静态值类型和所有引用类型成员的引用(拷贝后的对象共享所有引用类型成员的实际对象)类型基类System.Object已经为所有类型实现了浅拷贝,类型所要做的就是公开一个复制的接口,这个接口一般借由实现ICloneable接口来实现,ICloneable只......
  • 利用 inotifywait 实现自动增量文件拷贝
    #!/bin/bashsrc=/www/wwwroot/site0/images/dest=/www/wwwroot/site1/images/tool=/user/bin/mytoolinotifywait-mrq--format'%w%f'-ecreate$src|whilereadfiledosleep1#从create到写好,有一个过程,等一下更安全rpath=$dest/${file:2......
  • c#用表达式树实现深拷贝功能
    因为对表达式树有点兴趣,出于练手的目的,试着写了一个深拷贝的工具库。支持.netstandard2.0或.netframework4.5及以上。GitHub地址https://github.com/blurhkh/DeepCopiernuget地址https://www.nuget.org/packages/DeepCopier使用方法如下:首先创建几个测试用的类型pub......
  • 深浅拷贝、第三方模块的下载与安装、开发流程
    深浅拷贝详解1.对于不可变对象,深拷贝和浅拷贝的效果是一样的,因为不可变对象不需要在内存中复制2.对于可变对象,深拷贝和浅拷贝的效果是有区别的,主要原因在于可变对象自身的可变性质浅拷贝1.1使用数据类型本身的构造器list1=[1,2,3]list2=list(list1)print(list2)pri......
  • hfile通过bulkload拷贝到hbase方式---TODO待整理
      参考链接: http://www.ithao123.cn/content-101658.html hbase之bulkload的主要类LoadIncrementalHFiles  http://www.thinksaas.cn/group/topic/233674/ bulkload执行mv和cp的区别 使用LoadIncrementalHFiles装载HFILE到HBASE的一点心得  : 数据入HBASE一般有......