基于对什么是深拷贝?什么是浅拷贝?如何实现一个深拷贝和浅拷贝?为什么要用到深拷贝?的思考,总结如下,如有不足之处希望多多指教。

什么是浅拷贝?

浅拷贝只是拷贝一层,更深层次对象级别的只拷贝引用。

  • A是一个对象,它具有基本数据类型的属性和引用数据类型的属性。执行如下操作可以对其进行浅拷贝。
let A = {name: 'I',age: 25,family: {father: 'F',age: 50,};
//用 for in 方法拷贝A对象
let B = {};for (let key in A) {B[key] = A[key];}//推荐用ES6的Object.assign(target, ...sources)方法实现浅拷贝A对象
//target 目标对象。sources 源对象。
let C = {};Object.assign(C,A);
  • 对象B和C都是A的副本,在浅拷贝的过程中对象A的基本类型值直接拷贝给副本,而引用类型属性只是将属性值的地址拷贝给副本,A、B、C的family属性指向同一块堆内存空间,其中一个对象的family属性中的数据改变另外两个也会跟着改变。

  • 然而在实际的项目开发中,我们希望在不改变原有数据的基础上,对数据进行操作,这时候就需要深拷贝一个数据的副本。

什么是深拷贝?

深拷贝拷贝多层,每一级别的数据都会拷贝。

  • 利用函数递归的思想可以实现深拷贝。
        let A = {name: 'I',age: 25,family: {father: 'F',age: 50,};let B = {}//封装函数function deepCopy(newobj, oldobj) {for (let k in oldobj) {//判断我们的属性值属于哪种数据类型//1.获取属性值 let item = oldobj[k];//2.判断是否为数组类型if(item instanceof Array){newobj[k]=[]deepCopy(newobj[k], item);}//3.判断是否为对象类型else if(item instanceof Object){newobj[k]={}deepCopy(newobj[k], item);}//4.如果是普通类型else{newobj[k]=item;}}}deepCopy(B, A);
  • 这样就可实现A的一个完全独立的副本,改变B中的任何值都不会影响A中的内容。

深拷贝与浅拷贝是什么?如何实现浅拷贝和深拷贝?相关推荐

  1. python 实例对象 浅拷贝_Python对象中的浅拷贝和深拷贝

    Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发. Python中的赋值语句不会创建对象的副本,而只是给对象绑定了新的名称.对于不可变对象,这通常没什么区别. ...

  2. (每日一题)面试官:深拷贝浅拷贝的区别?如何实现一个深拷贝?

    一.数据类型存储 前面文章我们讲到,JavaScript中存在两大数据类型: 基本类型 引用类型 基本类型数据保存在在栈内存中 引用类型数据保存在堆内存中,引用数据类型的变量是一个指向堆内存中实际对象 ...

  3. 深拷贝和浅拷贝有什么区别?怎么实现深拷贝和浅拷贝?

    一.浅拷贝 浅拷贝,指的是创建新的对象,这个对象有着原始数据属性值的一份精确拷贝 如果属性是基本类型,拷贝的就是基本类型的值.如果属性是复杂类型,拷贝的就是内存地址 下面简单实现一个浅拷贝 funct ...

  4. js 浅拷贝直接赋值_js的浅拷贝和深拷贝的简单理解和使用方法

    使用js对象赋值给另一个变量的时候默认是传的引用,什么是引用呢,通俗一点讲就是传的是一个指针,当你对被赋值的变量进行操作的时候原来的值也会变动.这个时候就需要深拷贝啦,也就是把对象所有属性都复制一份到 ...

  5. mysql浅拷贝_List的复制 (浅拷贝与深拷贝)

    开门见山的说,List的复制其实是很常见的,List其本质就是数组,而其存储的形式是地址 如图所示,将List A列表复制时,其实相当于A的内容复制给了B,java中相同内容的数组指向同一地址,即进行 ...

  6. js深拷贝和浅拷贝对数组的影响_JS基础——深拷贝与浅拷贝

    浅拷贝 对象的浅拷贝 Object.assign()方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象,它将返回目标对象. var target = { name:"rlxu&qu ...

  7. java数组深拷贝和浅拷贝_java List复制:浅拷贝与深拷贝

    Java的拷贝可以分为三种:浅拷贝(Shallow Copy).深拷贝(Deep Copy).延迟拷贝(Lazy Copy). 在java中除了基本数据类型之外(int,long,short等),还存 ...

  8. 浅拷贝 python_python中什么是浅拷贝

    python中浅拷贝是对一个对象最顶层的拷贝. 浅拷贝对可变数据类型会拷贝这个对象的引用:对于不可变数据类型进行对象资源的拷贝,即只拷贝对象的数据内容和父对象,不拷贝对象内部的子对象. 在python ...

  9. python中的浅拷贝_python中什么是浅拷贝

    python中浅拷贝是对一个对象最顶层的拷贝. 浅拷贝对可变数据类型会拷贝这个对象的引用:对于不可变数据类型进行对象资源的拷贝,即只拷贝对象的数据内容和父对象,不拷贝对象内部的子对象. 在python ...

  10. 刚学会深拷贝一个对象,学妹却问我怎么深拷贝一个图

    前言 在前面,我写过一篇Java的深浅拷贝,那是基于对象的拷贝,但放眼数据结构与算法中,你有考虑过怎么拷贝一个图吗?(无向图) 在此之前,你需要对一些概念搞清楚:什么是深拷贝.浅拷贝? 浅拷贝:如果拷 ...

最新文章

  1. Linux文件查找工具的探索
  2. eci转换ci公式_原文提供的置信区间不是95%,如何转换?
  3. ubuntu install node npm bower
  4. docker linux redis 安装
  5. qt框架的开发模式_Flutter 混合开发框架模式探索
  6. c语言case后面多字符,多SWITCH-CASE结构时的C语言对象方式化解
  7. 高能力成熟度软件企业中软件质量工程师的职责
  8. 玩Weld-Probe –一站式查看CDI的所有方面
  9. WPF 程序最大化,窗口,最小化
  10. Django之序列化
  11. P2P流媒体直播点播(带宽节约95%以上)
  12. python h5s文件 压缩_如何用python解压zip压缩文件
  13. [Spring实战系列](19)Servlet不同版本之间的区别
  14. 从 GMM 到 EM 算法
  15. 常用的五种大数据分析方法
  16. drupal mysql hash密码_變更drupal7用戶密碼加密方式
  17. 程序员到底有没有必要买一台阿里云服务器?
  18. 将单元格中的内容拆分成多列/行
  19. 7_22_html_美食网设计
  20. html热点区域的素材,htmllabel

热门文章

  1. 时代新宠儿——HEIF图像格式:节省50%空间
  2. 基于html5的数据可视化实现方法研究,基于HTML5的数据可视化实现方法研究
  3. Underlying cause: java.io.IOException : Schema script failed, errorcode 2
  4. Policy Evaluation收敛性、炼丹与数学家
  5. node安装node-pre-gyp报错的解决方案
  6. 手机短信转发到另一个手机接收_怎么把手机号码导入另一个手机中(新手机是华为的,旧手机是三星的)...
  7. 梯形波的傅里叶级数分解
  8. linux系统打开远程端口,linux下3种检测远程端口是否打开的方法
  9. java匹配字段返回成功,Java MongoTemplate查询返回指定字段及指定数量的数据
  10. 【运维小知识】单点登录是什么意思?有什么作用?