dtcms插件 Android防重复点击 Zookeeper安装 java设计模式 JAVA学习 树莓派USB vim npm安装 bash gtk 后台模板 找公司做网站 axure组件库下载 mysql批量更新数据 iot系统 linux关闭mysql string转16进制 coreldraw入门学习 vue使用bootstrap matlab读入图片 python安装配置 python开发工具 python中re模块 javasubstring 安装java环境 java中的队列 java中的数据结构 javaenum java对象是什么 java注释规范 linux密码 linux系统安装教程图解 嵌入式开发教程 乱码查看器 hadoop权威指南 网站数据分析工具 js闭包的理解 listpreference blued是什么软件 视频相册制作软件
当前位置: 首页 > 学习教程  > 编程学习

【Python进阶】超简单的图解 “ 深浅拷贝 ”

2021/1/9 2:04:42 文章标签: 深浅拷贝

原文地址https://blog.csdn.net/qq_41333582/article/details/82155698 在谈深浅拷贝之前还是先谈谈赋值吧! 赋值 对象之间赋值本质上 是对象之间的引用传递而已。也就是多个对象指向同一个数据空间。 浅拷贝 浅拷贝是对一个对象的顶层数据的拷贝 简易内存空…

原文地址https://blog.csdn.net/qq_41333582/article/details/82155698

在谈深浅拷贝之前还是先谈谈赋值吧!

赋值

对象之间赋值本质上 是对象之间的引用传递而已。也就是多个对象指向同一个数据空间。 
赋值

浅拷贝

浅拷贝是对一个对象的顶层数据的拷贝 
浅拷贝

简易内存空间图 
浅拷贝内存图

深拷贝

深拷贝是对于一个对象所有层次的拷贝(递归)

深拷贝

进一步理解深拷贝

深拷贝
深拷贝

深拷贝

  • 深拷贝就是对一个对象的所有层次递归拷贝

赋值与拷贝的区别

赋值是引用的改变,而拷贝是重新开辟一片空间

深拷贝与浅拷贝的区别

浅拷贝只是拷贝最外层数据,而深拷贝是递归拷贝所有层数据。

python中大部分方法都是浅拷贝如切片; 
浅拷贝切片

字典的copy方法可以拷贝一个字典

浅拷贝字典

为什么Python中大多数都是浅拷贝呢?

  • 时间角度,浅拷贝花费时间更少
  • 空间角度,浅拷贝花费内存更少
  • 效率角度,浅拷贝只拷贝顶层数据,一般情况下比深拷贝效率高。

特别注意:

浅拷贝对不可变类型和可变类型的copy不同

  • copy.copy对于可变类型,会进行浅拷贝
  • copy.copy和copy.deepcopy对于不可变类型没有意义,全部等价于对象之间的赋值操作。
In [88]: a = [11,22,33]
In [89]: b = copy.copy(a)
In [90]: id(a)
Out[90]: 59275144
In [91]: id(b)
Out[91]: 59525600
In [92]: a.append(44)
In [93]: a
Out[93]: [11, 22, 33, 44]
In [94]: b
Out[94]: [11, 22, 33]


In [95]: a = (11,22,33)
In [96]: b = copy.copy(a)
In [97]: id(a)
Out[97]: 58890680
In [98]: id(b)
Out[98]: 58890680

本文链接: http://www.dtmao.cc/news_show_1100273.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?