单层浅拷贝

import copy
a = 1  # 不可变数据类型
copy_a = copy.copy(a)
print(id(a),id(copy_a))  # 内存地址相同a = [1,2]  # 可变数据类型
copy_a = copy.copy(a)
print(id(a),id(copy_a))  # 内存地址不相同

单层深拷贝

import copy
a = 1  # 不可变数据类型
copy_a = copy.deepcopy(a)
print(id(a),id(copy_a))  # 内存地址相同a = [1,2]  # 可变数据类型
copy_a = copy.deepcopy(a)
print(id(a),id(copy_a))  # 内存地址不相同

结论一:

不管深拷贝还是浅拷贝对不可变数据类型都是引用内存地址

不管深拷贝还是浅拷贝对可变数据类型都是会重新创建新的内存空间

浅拷贝嵌套

# -----------不可变数据类型---------
# 情况一,内嵌可变数据类型
import copy
a = ([1,2],(3,4))  # 不可变数据类型
copy_a = copy.copy(a)
print(id(a),id(copy_a))  # 内存地址相同
# 情况二,内嵌不可变数据类型
a = ((1,2),(3,4))  # 不可变数据类型
copy_a = copy.copy(a)
print(id(a),id(copy_a))  # 内存地址相同#-----------可变数据类型-------------
# 情况一,内嵌可变数据类型
import copy
a = [(1,2),[3,4]]  # 可变数据类型
copy_a = copy.copy(a)
print(id(a),id(copy_a))  # 内存地址不相同# 情况一, 可变数据类型 内嵌可变数据类型
import copy
a = [(1,2),(3,4)]  # 可变数据类型
copy_a = copy.copy(a)
print(id(a),id(copy_a))  # 内存地址不相同

深拷贝嵌套

# -----------不可变数据类型---------
# 情况一,内嵌可变数据类型
import copy
a = ([1,2],(3,4))  # 不可变数据类型
copy_a = copy.deepcopy(a)
print(id(a),id(copy_a))  # 内存地址不相同
# 情况二,内嵌不可变数据类型
a = ((1,2),(3,4))  # 不可变数据类型
copy_a = copy.deepcopy(a)
print(id(a),id(copy_a))  # 内存地址相同#-----------可变数据类型-------------
# 情况一,内嵌可变数据类型
import copy
a = [(1,2),[3,4]]  # 可变数据类型
copy_a = copy.deepcopy(a)
print(id(a),id(copy_a))  # 内存地址不相同
print(id(a[0]),id(copy_a[0]))  # 内存地址相同
print(id(a[1]),id(copy_a[1]))  # 内存地址不相同# 情况一, 可变数据类型 内嵌可变数据类型
import copy
a = [(1,2),(3,4)]  # 可变数据类型
copy_a = copy.deepcopy(a)
print(id(a),id(copy_a))  # 内存地址不相同
print(id(a[0]),id(copy_a[0]))  # 内存地址相同

结论二:

浅拷贝:

  1. 外层是不可变类型、不管内层是否可变都是引用拷贝
  2. 外层是可变类型,不管内层是否可变都会从新创建新的内存空间

深拷贝:

  1. 外层是不可变类型,会递归判断内层数据类型、如果可变则创建新的内存地址、都为不可变就是引用拷贝
  2. 外层是可变数据类型、不管内层是否可变都会创新新的内存地址、但是内部如果为可变则递归创建、不可变则为引用地址

总结:

浅拷贝:

  1. 浅拷贝只做最顶层的数据类型判断
  2. 如果顶层是可变类型则创建新的内存空间
  3. 如果顶层是不可变数据类型就是引用拷贝

深拷贝

  1. 深拷贝做递归拷贝,可以递归拷贝所有的内部嵌套数据(可以理解为循环遍历做浅拷贝判断)
  2. 深拷贝递归拷贝遇到可变类型则创建新的内存空间
  3. 深拷贝递归拷贝遇到不可变数据类型就是拷贝的引用

转载于:https://www.cnblogs.com/fandx/p/10462913.html

Python中浅拷贝和深拷贝的区别总结与理解相关推荐

  1. python中浅拷贝和深拷贝的区别_Python中浅拷贝和深拷贝的区别

    Python中浅拷贝和深拷贝的区别 浅拷贝和深拷贝示意图 如上图,简单点说 1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象. 2. copy.deepcopy 深拷贝 拷贝 ...

  2. 彻底理解Python中浅拷贝和深拷贝的区别

    目录 前言 1. 浅拷贝和深拷贝的概念 2. is和==的区别 3. 赋值操作 4. copy模块里面的copy()方法 5. copy模块里面的deepcopy()方法 6.字典自带的copy方法 ...

  3. Python中浅拷贝和深拷贝的理解与研究

    Python中浅拷贝和深拷贝的理解与研究 单层浅拷贝 import copy a = 1 # 不可变数据类型 copy_a = copy.copy(a) print(id(a),id(copy_a)) ...

  4. Python中浅拷贝和深拷贝的理解与研究 1

    Python中浅拷贝和深拷贝的理解与研究 单层浅拷贝 import copy a = 1 # 不可变数据类型 copy_a = copy.copy(a) print(id(a),id(copy_a)) ...

  5. python中浅拷贝与深拷贝

    参考链接 1. 引用 https://blog.csdn.net/qq_38556217/article/details/103002827 2. Python中变量在内存的存储与地址变化详解(深浅拷 ...

  6. python赋值浅拷贝和深拷贝的区别_python赋值、浅拷贝、深拷贝区别

    在写Python过程中,经常会遇到对象的拷贝,如果不理解浅拷贝和深拷贝的概念,你的代码就可能出现一些问题.所以,在这里按个人的理解谈谈它们之间的区别. 一.赋值(assignment) 在<Py ...

  7. Python中浅拷贝与深拷贝的骚操作

    作者:缪斯mius@阿里云Python训练营 博客地址:https://blog.csdn.net/m0_37759382/article/details/108489108 [例子]浅拷贝与深拷贝中 ...

  8. Java中浅拷贝和深拷贝的区别

    深拷贝和浅拷贝的区别 浅拷贝:被拷贝的对象的所有属性值都与原来的对象相同,而对象的所有属性引用仍然指向原来的属性所指向的内存地址.需要注意的是cloneObj == obj 返回的是false,所以使 ...

  9. 对python中浅拷贝和深拷贝分析详细介绍

    首先,我们知道Python3中,有6个标准的数据类型,他们又分为可以变和不可变. 不可变:Number(数字).String(字符串).Tuple(元组). 可以变:List(列表).Dictiona ...

最新文章

  1. Matplotlib可视化散点图、配置X轴为对数坐标、并使用线条(line)连接散点图中的数据点(Simple Line Plot with Data points in Matplotlib)
  2. css hack *html,CSS Hack详解
  3. MyEclipse导入项目后 js文件报错
  4. C语言编程序编数独,求用C语言编一个解九宫格数独的程序怎么办? 爱问知识人...
  5. 问题 K: n个数的最大值和最小值
  6. 系列课程 ElasticSearch 之第 8 篇 —— SpringBoot 整合 ElasticSearch 做查询(分页查询)
  7. 无线渗透-----aircrack-ng破解WEP加密
  8. html打印自定义页头,CSS实现打印网页自定义页眉页脚
  9. 什么是安迪比尔定理?
  10. Sam Altman专访:GPT-4没太让我惊讶,ChatGPT则让我喜出望外
  11. 当今十大备份应用软件
  12. chrome和Firefox浏览器如何访问非安全端口站点
  13. c语言在线练习题库,C语言练习题库(含答案).doc
  14. Linux虚拟机忘记密码
  15. 基准价搭档“货比三家” 8thManage轻松节省采购成本
  16. 家家有个机器人 机器人正经历“PC式发展”
  17. SX1308无法升压带载发烫解决办法
  18. spark触发adaptive skewed join的例子code
  19. linux-shell系列5-统计
  20. windows7下安装centos7系统或者单独装centos7

热门文章

  1. 双十一@你:CSDN会员底价警告,据说有点刺激
  2. AI安全才刚刚开始 未来发展需要三方面思考
  3. SpringCloud第11讲:用Nacos远程管理配置
  4. 【众智】【AICPU算子】ST报错 RunTimeError
  5. STM32F4步进电机速度和位移与定时器输出PWM频率计算
  6. 企业网盘有关校园云盘的解决方案内容的共享与学习
  7. 使用Boostrap V4,左侧菜单栏可缩进,并根据屏幕宽度自适应大小。
  8. vhost-user 简介
  9. KNIME服务器相关接口的实现
  10. iOS视频播放横竖屏切换技巧