1.首先介绍一个python的内置函数id()

  • id()可以查看传入对象在内存中的地址。
  • 在python中,对一些常用的数字或字符串,虽然变量名不同,但是为了节省内存,通常会共享同一个地址,如下代码示例:
# 变量a、b共用内存地址
a = 257
b = 257
print(id(a))#输出:1950671417040
print(id(b))#输出:1950671417040

2.拷贝:

  • 当我们对变量a进行拷贝的时候,意味着在内存中开辟一块新的地址存放变量a的值。
  • 对于str,int型的数据,无论深浅拷贝,返回的新变量都只是原变量的一个引用,而不会在内存中开辟新的地址。
  • 对于其他类型的数据,浅拷贝指只对第一层的元素开辟新的地址,即数据的父亲层,对内层(子孙辈的层)还使用原来的地址。
  • 深拷贝指除了最内存的元素使用原来的地址,其他层均在内存中开辟新的地址。

3.举例说明:

  • str,int型数据: str型就不再举例,可见无论深浅拷贝,a,b,c都共享内存地址。
import copy
a = 123
#浅拷贝
b = copy.copy(a)
#深拷贝
c = copy.deepcopy(a)
print(id(a))# 输出:1543671728
print(id(b))# 输出:1543671728
print(id(c))# 输出:1543671728
  • 其他类型的浅拷贝
import copy
a = [1, 2, [3, 4, 5], (6, [7, 8])]
#浅拷贝
b = copy.copy(a)
#第一层地址
print(id(a))# 输出:1854916189768
print(id(b))# 输出:1854916187912
#第二层地址
print(id(a[2]))# 输出:2532194133000
print(id(b[2]))# 输出:2532194133000
#第三层往后地址与第二层地址类似
  • 其他类型的深拷贝
import copy
a = [1, 2, [3, 4, 5], (6, [7, 8])]
#深拷贝
b = copy.deepcopy(a)
#第一层地址(不共享)
print(id(a))# 输出:1854916189768
print(id(b))# 输出:1854916187912#第二层地址(不共享)
print(id(a[2]))# 输出:2694868837384
print(id(b[2]))# 输出:2694871380936#.....中间层......#最里层的地址(共享)
print(id(a[2][0]))#输出:1543667888
print(id(b[2][0]))#输出:1543667888

4.图解深浅拷贝:

  • 以列表a = [1, 2, [3, 4, 5], (6, [7, 8])]为例

【Python基础】之深浅拷贝相关推荐

  1. Python赋值与深浅拷贝

    # coding=utf-8 #Python 赋值 与深浅拷贝 #Python 赋值时会创建一个新的引用,对不可变对象,实际上象创建一个副本,但对可变对象,因为是引用,当对其中一个对象的元素进行操作时 ...

  2. python——赋值与深浅拷贝

    结合python变量存储的特性从内存的角度来谈一谈赋值和深浅拷贝~~~ 预备知识一--python的变量及其存储 在详细的了解python中赋值.copy和deepcopy之前,我们还是要花一点时间来 ...

  3. Python系列 18 深浅拷贝

    拷贝 copy即拷贝,意在将相同的数据进行复制,以便将复制出的副本应用于不同的操作上,而本体不会受到任何影响. 绝大多数语言中都有深浅拷贝的概念,故此篇文章也是属于通用性文章. 在Python中,除开 ...

  4. python赋值、深浅拷贝

    赋值: 赋值是绑定对象的引用:只要对象被修改,就会发生变化 深浅拷贝 如果希望将列表复制一份,通过列表的内置方法copy就可以实现: s = [[1,2],3,4]s1 = s.copy()print ...

  5. python学习之深浅拷贝

    4.2 深浅拷贝 4.2.1 认识 首先应该知道python中变量在内存中是怎么存放的! 在python中,变量与变量的值占用不同的内存.变量占用的内存,并非直接存储数值,而存储的是值在内存中的地址. ...

  6. python中的深浅拷贝

    1.    浅拷贝  copy.copy 浅拷贝是对于⼀个对象的顶层拷贝 通俗的理解是:拷贝了引⽤,并没有拷贝内容 浅拷贝只复制第一层数据,更深层的引用不管. 2.    深拷贝   copy.dee ...

  7. python list 的深浅拷贝探索

    对于list来讲,除了使用copy.deepcopy()来实现深copy外,还可以使用什么更加简单的方式呢?下面先介绍copy.deepcopy()例子: >>> a = [1] & ...

  8. 前端面试JS必备基础之深浅拷贝和this指向问题@莫成尘

    一:js深拷贝 在JS中,数据类型分为基本数据类型和引用数据类型两种,对于基本数据类型来说,它的值直接存储在栈内存中,而对于引用类型来说,它在栈内存中仅仅存储了一个引用,而真正的数据存储在堆内存中.深 ...

  9. python中的深浅拷贝的区别

    li = [1,1,2,3,4,5,6,7,8,9]l2=li # 这样定义不行共用内存空间,其实是一体# l2 = [1,1,2,3,4,5,6,7,8,9]l3=li[:]for i in l2: ...

  10. 【Python基础】Python的深浅拷贝讲解

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 前言 在很多语言中都存在深浅拷贝两种拷贝数据的方式,Python中 ...

最新文章

  1. Python发展迅猛,如何在Python热中脱颖而出了?
  2. DIV+CSS常见问题的14条原因分析
  3. linux 关闭开机 ftp,解决linux ftp匿名上传、下载开机自启问题
  4. java 装配_Spring 通过Java代码装配bean
  5. html获取节点属性,JS操作属性节点(非常详细)
  6. [CentOs7]搭建ftp服务器(3)——上传,下载,删除,重命名,新建文件夹
  7. 虚拟机安装VMware ESXi 6.7安装过程介绍
  8. 定制属于自己的自动化安装的linux系统镜像
  9. java 微信开发图片发送,微信开发?Java上传Base64图片
  10. 要搞懂 volatile 关键字,就靠这 26 张图
  11. Lodop 打印使用笔记
  12. 【ENSP模拟器】ENSP——VLAN的配置
  13. 锯齿波调制的FMCW雷达差拍信号的推导及分析
  14. java控制发送邮箱(qq邮箱、网易邮箱、新浪邮箱)
  15. 读书笔记(一)数联网——大数据如何互联
  16. Oracle中字符串截取最全方法总结
  17. Protoss and Zerg(第十五届浙江大学宁波理工学院程序设计大赛H)
  18. 小学四则运算练习软件需求说明
  19. 怎么领支付宝大红包?技术方面有这三大考量!
  20. bte上了b网_酷站推荐 - tukkk.com - 小语种口语网

热门文章

  1. 通过两道一年级数学题反思自己
  2. Word2vec简介,入门
  3. Enabled设置为False时,前景色和背景色也不改变的TextBox 并居中
  4. java 实现微信公众号消息推送
  5. 软件架构实践(第四版)
  6. 蓝桥杯第五届第四题过大年加法算式
  7. 怎么把pdf转换成word?介绍两种方法
  8. 手机内存卡数据丢失怎么办?
  9. 米线店结账程序 装饰着模式_海底捞推出三个子品牌 主打餐饮10元店模式
  10. 2017福州大学面向对象程序设计课程作业八