浅谈Python对内存的使用(深浅拷贝)


Posted in Python onJanuary 17, 2018

本文主要研究的是Python对内存的使用(深浅拷贝)的相关问题,具体介绍如下。

浅拷贝就是对引用的拷贝(只拷贝父对象)

深拷贝就是对对象的资源的拷贝

>>> a=[1,2,3,'a','b']
>>> b=a
>>> b
[1, 2, 3, 'a', 'b']
>>> a
[1, 2, 3, 'a', 'b']
>>> id(a)
3021737547592
>>> id(b)
3021737547592
>>> a.append('c')
>>> a
[1, 2, 3, 'a', 'b', 'c']
>>> b
[1, 2, 3, 'a', 'b', 'c']
>>> b.append(4)
>>> b
[1, 2, 3, 'a', 'b', 'c', 4]
>>> a
[1, 2, 3, 'a', 'b', 'c', 4]

从以上操作可以看出:将a赋值给b后,a和b的地址是一样的,无论那个发生变化,另一个都会跟着变化,始终保持相同。

>>> import copy
>>> a=[1,2,3,['a','b','c']]
>>> b=a
>>> c=copy.copy(a)
>>> b
[1, 2, 3, ['a', 'b', 'c']]
>>> c
[1, 2, 3, ['a', 'b', 'c']]
>>> id(a)
3021737548104
>>> id(b)
3021737548104
>>> id(c)
3021737494536    #浅拷贝父对象的地址不一样
>>> a.append('d')
>>> a
[1, 2, 3, ['a', 'b', 'c'], 'd']
>>> b
[1, 2, 3, ['a', 'b', 'c'], 'd']
>>> c
[1, 2, 3, ['a', 'b', 'c']] #a和c的地址不一样,因此a变化,c不变化




>>> id(a[0])
1686357680
>>> id(c[0])
1686357680
>>> id(a[3])
3021737547528
>>> id(c[3])   
3021737547528    #整个父对象所占的空间不一样,但相同的内层数据的所占空间一样
>>> a[3].append('d')
>>> a
[1, 2, 3, ['a', 'b', 'c', 'd'], 'd']
>>> c
[1, 2, 3, ['a', 'b', 'c', 'd']]#因为内层数据所占空间一样,所以a变化,c跟着变化

以上就是浅拷贝:整个父对象的地址不一样,内层数据的地址相同,操作内层数据的话,一同变化;操作对象为父对象时,拷贝对象不跟着变化。

>>> a
[1, 2, 3, ['a', 'b', 'c', 'd'], 'd']
>>> d=copy.deepcopy(a)
>>> d
[1, 2, 3, ['a', 'b', 'c', 'd'], 'd']
>>> id(a)
3021737548104
>>> id(d)
3021737547656  #深拷贝父对象的地址不一样

>>> a.append('e')
>>> a
[1, 2, 3, ['a', 'b', 'c', 'd'], 'd', 'e']
>>> d
[1, 2, 3, ['a', 'b', 'c', 'd'], 'd']#a和d的地址不一样,因此a变化,d不变化
>>> id(a[0])
1686357680
>>> id(d[0])
1686357680
>>> id(a[3])
3021737547528
>>> id(d[3])
3021737493256  #内层数据的地址不一样
>>> a[3].append('x')
>>> a
[1, 2, 3, ['a', 'b', 'c', 'd', 'x'], 'd', 'e']
>>> d
[1, 2, 3, ['a', 'b', 'c', 'd'], 'd']

以上是深拷贝

区别:

浅拷贝与原对象的内层数据地址相同;
深拷贝完全独立开来,与原对象没有任何联系。

总结

以上就是本文关于浅谈Python对内存的使用(深浅拷贝)的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

Python 相关文章推荐
python time模块用法实例详解
Sep 11 Python
用Python实现一个简单的能够上传下载的HTTP服务器
May 05 Python
python连接字符串的方法小结
Jul 13 Python
Python检测生僻字的实现方法
Oct 23 Python
python中pandas.DataFrame的简单操作方法(创建、索引、增添与删除)
Mar 12 Python
pytorch 指定gpu训练与多gpu并行训练示例
Dec 31 Python
利用python对excel中一列的时间数据更改格式操作
Jul 14 Python
scrapy处理python爬虫调度详解
Nov 23 Python
Python爬虫教程之利用正则表达式匹配网页内容
Dec 08 Python
Python lxml库的简单介绍及基本使用讲解
Dec 22 Python
matplotlib自定义鼠标光标坐标格式的实现
Jan 08 Python
python的列表生成式,生成器和generator对象你了解吗
Mar 16 Python
Python分支结构(switch)操作简介
Jan 17 #Python
python2 与python3的print区别小结
Jan 16 #Python
python正则中最短匹配实现代码
Jan 16 #Python
Python程序员面试题 你必须提前准备!
Jan 16 #Python
详解python使用递归、尾递归、循环三种方式实现斐波那契数列
Jan 16 #Python
Python+tkinter模拟“记住我”自动登录实例代码
Jan 16 #Python
Python利用字典将两个通讯录文本合并为一个文本实例
Jan 16 #Python
You might like
写php分页时出现的Fatal error的解决方法
2011/04/18 PHP
PHPThumb PHP 图片缩略图库
2012/03/11 PHP
PHP中SESSION使用中的一点经验总结
2012/03/30 PHP
PHP获得数组交集与差集的方法
2015/06/10 PHP
php使用curl并发减少后端访问时间的方法分析
2016/05/12 PHP
PHP使用curl制作简易百度搜索
2016/11/03 PHP
PHP实现按之字形顺序打印二叉树的方法
2018/01/16 PHP
jquery 简单的进度条实现代码
2010/03/11 Javascript
原生js编写设为首页兼容ie、火狐和谷歌
2014/06/05 Javascript
百度判断手机终端并自动跳转js代码及使用实例
2014/06/11 Javascript
js怎么判断flash swf文件是否加载完毕
2014/08/14 Javascript
jquery.cookie.js使用指南
2015/01/05 Javascript
瀑布流的实现方式(原生js+jquery+css3)
2020/06/28 Javascript
Flask中获取小程序Request数据的两种方法
2017/05/12 Javascript
第一次记录Bootstrap table学习笔记(1)
2017/05/18 Javascript
jQuery绑定事件方法及区别(bind,click,on,live,one)
2017/08/14 jQuery
深入理解js 中async 函数的含义和用法
2018/05/13 Javascript
解决vue keep-alive 数据更新的问题
2018/09/21 Javascript
mpvue项目中使用第三方UI组件库的方法
2018/09/30 Javascript
swiper自定义分页器的样式
2020/09/14 Javascript
如何搭建一个完整的Vue3.0+ts的项目步骤
2020/10/18 Javascript
[03:03]2014DOTA2国际邀请赛 EG战队专访
2014/07/12 DOTA
[40:19]完美世界DOTA2联赛PWL S3 Rebirth vs CPG 第二场 12.18
2020/12/19 DOTA
在Python中使用Neo4j数据库的教程
2015/04/16 Python
Python查询阿里巴巴关键字排名的方法
2015/07/08 Python
Python实现检测文件MD5值的方法示例
2018/04/11 Python
Python程序控制语句用法实例分析
2020/01/14 Python
Python 去除字符串中指定字符串
2020/03/05 Python
pyecharts在数据可视化中的应用详解
2020/06/08 Python
敬老文明号事迹材料
2014/01/16 职场文书
优秀企业获奖感言
2014/02/01 职场文书
遥感技术与仪器求职信
2014/02/22 职场文书
松材线虫病防治方案
2014/06/15 职场文书
开展党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
退休职工欢送会致辞
2015/08/01 职场文书
Python 发送SMTP邮件的简单教程
2021/06/24 Python