参考链接

骏马金龙

前提

想要了解深浅拷贝之前必须要知道可变和不可变类型,和他们的特性

不可变类型

数字 字符串 元组 不可变集合

特性:改变值,会创建新的内存空间存储数据

可变类型

列表 字典 可变列表

特性:改变值,还是引用之前的内存空间

Python引用赋值

开篇

引用赋值其实就是=,多个变量指向同一个内存空间

不可变案例

#a指向1000的内存地址
a = 1000
#b也指向1000的内存地址
b = a
#a指向了2000的地址,b指向1000的内存地址
a = 2000

可变案例

L = [333,444,555]
L[1] = 4444
#L的地址是没有变化的,但是L[1]的地址发生的变化

列表的内存

列表的内存结构图,第一层的地址是不会随内容的改变而改变的

Python深浅拷贝

注意

深浅拷贝这个概念其实是针对可变数据类型的,不可变类型就没有这个概念

深浅拷贝概念

浅拷贝

shallow copy,只拷贝第一层的数据。copy模块的copy()就是浅拷贝

深拷贝

deep copy,递归拷贝所有层次的数据,python中copy模块的deepcopy()是深拷贝

浅拷贝

只拷贝了第一层的数据,存放在另一个空间

马老师亲手给我画的图

为下列代码的内存分布图

from copy import copy
a = [1,2,3]
b = [4,5,a]
c = copy(b) #查看id
#id不同.第一层是完全独立的
print(id(b),id(c)) #第二层还是引用的同一个列表
b[2][0] = 200
print(id(b[2]),id(c[2])) 1800001515976 1799717541960
1800000907528 1800000907528

深拷贝

完全拷贝,两个空间是完全独立的,没有一点关系了

from copy import deepcopy
a = [1,2,3]
b = [4,5,a]
c = deepcopy(b) #全部独立
print(id(b),id(c))
print(id(b[2]),id(c[2])) 2214201160136 2216093571144
2214200551688 2214201162312

最新文章

  1. FastReport报表对象介绍一:“Text”对象
  2. jQuery.qrcode.js客户端生成二维码,支持中文并且可以生成LOGO
  3. Generic method return type
  4. HDU 3555 Bomb 数位DP 入门
  5. Spark官方文档——独立集群模式(Standalone Mode)
  6. C# DateTime格式化
  7. 判断两棵树是否相等 leecode
  8. Asp.Net WebAPI传递json对象、后台手动接收参数
  9. 在同个类中non-const插入const来减少重复
  10. 【案例】舒邑:一个女装品牌的奇葩打法-@i黑马
  11. jQuery中click()与trigger方法的区别
  12. Ubuntu16.04更换漂亮绚丽flatabulous主题
  13. (转)Mysql数据库存储引擎
  14. Node.js--安装express以及创建第一个express项目(windows)
  15. bootmgr is missing 开机无法进系统怎么办
  16. 【转】msfvenom使用指南
  17. logging dictconfig
  18. Find the Missing Number II
  19. iOS沙盒机制介绍
  20. hdu 4788 (2013成都现场赛 H题)

热门文章

  1. css sprite responsive实现探究
  2. asp.net 获取当前,相对,绝对路径
  3. 洛谷 p1541乌龟棋
  4. SQLServer修改表名、修改列名
  5. bat脚本弹出消息示例(msg命令详细解释)
  6. 起步:SpringBoot
  7. 奇怪的ifcfg-eth0被自动还原
  8. Linux内存管理(最透彻的一篇)【转】
  9. Rocketmq原理&最佳实践
  10. JS高阶---定时器相关