深拷贝和浅拷贝

在正式聊深拷贝和浅拷贝之前,首先谈一个话题,数据类型是否可变?

可变类型:深拷贝和浅拷贝是有明显区别的;
不可变类型:深拷贝和浅拷贝没有区别,本质上都没有进行拷贝,而是内存意义上的指向;

那接下来我们聊一聊在可变类型数据前提下,深拷贝和浅拷贝的区别:
相同点:

  1. 不管是给对象进行深拷贝还是浅拷贝,只要拷贝成功就会开辟新的内存空间存储拷贝的对象
    区别点:
  2. 浅拷贝,可变类型数据进行浅拷贝只对可变类型的第一层对象进行拷贝,对拷贝的对象会开辟新的内存空间进行存储,子对象不进行拷贝。
  3. 深拷贝,会把容器中所有可变类型的数据进行深拷贝,即:可变类型数据进行深拷贝会对该对象到最后一个可变类型的每一层对象进行拷贝, 对每一层拷贝的对象都会开辟新的内存空间进行存储。
  4. 针对可变类型数据对象进行拷贝时,浅拷贝由于只对可变类型的第一层对象进行拷贝,所以如果我们对原数据的其他层数据进行修改时,我们浅拷贝对象的内部数据也会进行变化;而深拷贝由于对原对象所有层次的数据进行修改,因为数据相互独立,当我们修改其中任意对象数据时,另一个对象数据不会受到影响。所以从数据安全性角度考虑的话,深拷贝对我们数据安全更友好,但是会消耗更多的内存资源;
    5.特殊情况描述,大家都知道元祖类型数据属于不可变类型数据,但是有一种特殊的情况,还是要和大家具体分析一下:
    实例代码:
    a_tup = (1, 2, 3, [4, 5, 6])
    b_tup = copy.copy(a_tup)
    print(a_tup)
    print(b_tup)
    print("*"*20)
    a_tup[-1].append(7)
    print(a_tup)
    print(b_tup)

代码演示结果:
(1, 2, 3, [4, 5, 6])
(1, 2, 3, [4, 5, 6])


(1, 2, 3, [4, 5, 6, 7])
(1, 2, 3, [4, 5, 6, 7])

特殊情况总结:

也就是说,当不可变类型数据内部存在可变类型数据时,使用浅拷贝对其进行拷贝操作。浅拷贝完成后,存在对象a_tup和b_tup,当我们任意修改其中某一个对象数据时,另一对象内部的可变类型数据依然会被修改。所以如果站在数据安全角度考虑,为了避免在使用浅拷贝操作对应数据时,出现各个对象之间数据相互影响的情况,建议使用深拷贝。

吉米_王:浅谈深拷贝和浅拷贝异同点相关推荐

  1. vue对象深拷贝_浅谈深拷贝和浅拷贝

    深拷贝和浅拷贝 说起深拷贝和浅拷贝,首先我们来看两个栗子 // 栗子1 var a = 1,b=a; console.log(a); console.log(b) b = 2; console.log ...

  2. 浅谈深拷贝 与 浅拷贝

    1.javascript变量包含两种不同数据类型的值:基本类型和引用类型. 基本类型值指的是简单的数据段,包括es6里面新增的一共是有6种,具体如下: number.string.boolean.nu ...

  3. 来谈一谈深拷贝和浅拷贝的方法?

    豆芽今天来谈一谈深拷贝和浅拷贝的区别和使用的方法. 二者的区别 区别建立在针对引用类型 浅拷贝:重新在堆中创建内存,拷贝前后对象的基本数据类型互不影响,但拷贝前后对象的引用类型因共享同一块内存,会相互 ...

  4. aes key长度_原创 | 浅谈Shiro反序列化获取Key的几种方式

    点击"关注"了解更多信息 关于Apache Shiro反序列化 在shiro≤1.2.4版本,默认使⽤了CookieRememberMeManager,由于AES使用的key泄露, ...

  5. python怎么避免浅拷贝_深度解读Python深拷贝与浅拷贝问题

    Illustrations by Leon Tukker ♚ 作者:PayneLi,Python全家桶,主要讲述数据挖掘.机器学习和深度学习领域的前沿技术,同时还会推荐一些行业最新论文.技术专家的经验 ...

  6. 华为手机记事本导出_深夜浅谈怎样用一部手机做电影解说?

    小编从兴趣而至,到开始做第一部电影解说已经过去半个月了,作品也发布了三部,全程没用过一次电脑,自己之前也没接触过专业的软件,什么PR,AU之类的一概不懂,全程一部手机,只用剪映,今天就给大家分享一下我 ...

  7. python股票网格交易法详解_干货 | 浅谈网格交易法

    原标题:干货 | 浅谈网格交易法 网格交易法的基本原理就是把行情的所有日间上下的波动全部囊括,它不会放过任何一次的行情上下波动. 不管市场价格如何上下波动,不外3种形态:上涨,盘整,下跌.由于不同的操 ...

  8. sap 双计量单位_[原创]浅谈MM模块的双计量单位(二)

    [原创]浅谈MM模块的双计量单位(二) 本博文为隐身人原创作品,请勿转载. 我们继续按照以下的步骤来执行双计量单位的有关流程. 第一步:切换到批次类的"特性"视图,将我们刚才创建的 ...

  9. 2019天籁按键功能介绍_车主浅谈2019款天籁,2000公里的用车感受!

    车主浅谈2019款天籁,2000公里的用车感受! 个人比较偏爱日系车,在选择B级车的时候在凯美瑞.亚洲龙之间徘徊,最后综合对比后选择了天籁.对天籁最满意的地方就是他的舒适性了,天籁的座椅真的让我体验了 ...

最新文章

  1. Android: 启动另外的APP及传递参数(转)
  2. Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.12.4:test (default-test)
  3. DHCP数据抓包分析--wireshark
  4. Asp.Net中虚拟文件系统的使用
  5. Python Django 事务管理
  6. C++ 类和对象(二):构造函数、析构函数、拷贝构造函数、运算符重载
  7. 关于kafka中的timestamp与offset的对应关系
  8. Auto-Configuration Error: Cannot find gcc or CC
  9. 百度推出海外版网盘:竟免费不限速
  10. 目标检测(十七)--PVANet
  11. Flutter进阶第14篇:支付宝支付【下】
  12. 【 2019中国大学生程序设计竞赛(CCPC) - 网络选拔赛】1002.array【主席树】
  13. HTML基础——HTML
  14. dialog 弹窗关闭事件
  15. Java中的“无限循环”结构
  16. 【概率论与数理统计】python实验
  17. Python图片添加水印修改MD5值
  18. 关于NetBios的简单应用
  19. Python3.6新特性(部分)
  20. HTTPS 那些事 用 java 实现 HTTPS 工作原理

热门文章

  1. 科学解释:为什么越是无知的人越自信?
  2. 看电影适合什么蓝牙耳机?四款主动降噪高品质蓝牙耳机测评
  3. 计算机主机麦克风三个孔,台式机耳机和麦克风怎么通用一个插孔
  4. Oracle数据库怎么调大字体,CFree怎么调大字体 设置字体大小的方法
  5. 爬虫中使用selenium实现对斗鱼直播的各个房间标题、主播id,直播内容类型和热度信息的爬取
  6. robocup学习篇(一)
  7. 如何用Ps用高斯模糊
  8. 怎么录屏?5 款免费无水印的录屏神器
  9. java中获取日期 日期和字符串互转
  10. 程序员不仅是鼠标手,还是段子手