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

什么是浅拷贝?

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

  • 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. C、C++ 宽字符WCString转为char*
  2. SAP UI5 框架画Button的入口
  3. ViBe背景建模算法
  4. id 重启event_windows 2003 R2 系统自动重启了. event ID 6008
  5. 【计算机网络】HTTP协议历史版本
  6. 【Openstack】实录手动部署Openstack Rocky 双节点(1)- 基础服务
  7. Rendering Linear lighting and color
  8. scrapy常用设置参考手册
  9. 老男孩python培训怎么样_Python如何实现爬虫?老男孩Python
  10. java实现 图片转ico
  11. travis ci 自动部署
  12. 收益用计算机怎么计算,有利网收益计算器怎么用
  13. chemdraw怎么画拐弯的箭头_怎么样绘制弧形箭头?
  14. Android获取自定义格式时区
  15. python列表是顺序表还是链表_Python 中的 List 是封装了顺序存储结构还是链表存储结构?...
  16. Linux strace、pstack 命令 使用详解
  17. 无线LED智能照明控制系统
  18. (翻译)Pachyderm介绍-建造一个现代的Hadoop
  19. 低代码开发平台到底是何方圣神? 居然可以虏获世界500强等企业的芳心!
  20. 贝尔商道赚钱思维36道第26道:全球欠缺的财商教育

热门文章

  1. 实用软件/浏览器插件/网站合集(个人向,更新中)
  2. Simulink学习笔记
  3. Redis Geohash指令与位置服务应用
  4. 刺刀还在,理想已经滑落——“中国黑客”10年嬗变
  5. python识图找图_【python 图像识别】图像识别从菜鸟
  6. VERTU全球首款WEB3手机METAVERTU伦敦亮相
  7. Java 数据类型(基本数据类型、引用数据类型)
  8. gets与puts的使用,Str系列字符串的使用
  9. 企业项目化管理【一】:项目管理软件选型指南
  10. 用ajax接收后台数据里的具体数据,ajax动态接收后台向后台传输数据以及接收数据...