浅谈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格式化css文件的方法
Mar 10 Python
Python HTMLParser模块解析html获取url实例
Apr 08 Python
在Linux下使用Python的matplotlib绘制数据图的教程
Jun 11 Python
Python网络爬虫神器PyQuery的基本使用教程
Feb 03 Python
解决PyCharm import torch包失败的问题
Oct 13 Python
python程序封装为win32服务的方法
Mar 07 Python
Python3.7 读取音频根据文件名生成脚本的代码
Apr 07 Python
Python实现一个简单的毕业生信息管理系统的示例代码
Jun 08 Python
使用python matploblib库绘制准确率,损失率折线图
Jun 16 Python
解决Keras中Embedding层masking与Concatenate层不可调和的问题
Jun 18 Python
python利用递归方法实现求集合的幂集
Sep 07 Python
Python3获取cookie常用三种方案
Oct 05 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
dedecms模板标签代码官方参考
2007/03/17 PHP
php下的权限算法的实现
2007/04/28 PHP
PHP游戏编程25个脚本代码
2011/02/08 PHP
给ECShop添加最新评论
2015/01/07 PHP
功能强大的PHP POST提交数据类
2016/07/15 PHP
javascript中最常用的继承模式 组合继承
2010/08/12 Javascript
仅IE9/10同时支持script元素的onload和onreadystatechange事件分析
2011/04/27 Javascript
Javascript级联下拉菜单以及AJAX数据验证核心代码
2013/05/10 Javascript
JQuery文字列表向上滚动的代码
2013/11/13 Javascript
鼠标事件的screenY,pageY,clientY,layerY,offsetY属性详解
2015/03/12 Javascript
jQuery实现企业网站横幅焦点图切换功能实例
2015/04/30 Javascript
BootstrapTable+KnockoutJS自定义T4模板快速生成增删改查页面
2016/08/01 Javascript
JS+CSS3模拟溢出滚动效果
2016/08/12 Javascript
AngularJS入门教程之REST和定制服务详解
2016/08/19 Javascript
jQuery版AJAX简易封装代码
2016/09/14 Javascript
利用Vue.js+Node.js+MongoDB实现一个博客系统(附源码)
2017/04/24 Javascript
jquery实现tab选项卡切换效果(悬停、下方横线动画位移)
2017/05/05 jQuery
jQuery查找和过滤_动力节点节点Java学院整理
2017/07/04 jQuery
Vue下拉框回显并默认选中随机问题
2018/09/06 Javascript
详解如何快速配置webpack多入口脚手架
2018/12/28 Javascript
create-react-app使用antd按需加载的样式无效问题的解决
2019/02/26 Javascript
Bootstarp在pycharm中的安装及简单的使用方法
2019/04/19 Javascript
详解关闭令人抓狂的ESlint 语法检测配置方法
2019/10/28 Javascript
[03:08]TI9战队档案 - Vici Gaming
2019/08/20 DOTA
[01:16:28]DOTA2-DPC中国联赛 正赛 iG vs Magma BO3 第二场 2月23日
2021/03/11 DOTA
python合并文本文件示例
2014/02/07 Python
python实现比较两段文本不同之处的方法
2015/05/30 Python
如何使用Python实现自动化水军评论
2019/06/26 Python
使用Python内置模块与函数进行不同进制的数的转换
2020/04/26 Python
美国知名的摄影器材销售网站:Adorama
2017/02/01 全球购物
女子锻炼服装和瑜伽服装:Splits59
2019/03/04 全球购物
印度手工编织服装和家居用品商店:Fabindi
2019/10/07 全球购物
为什么要优先使用同步代码块而不是同步方法?
2013/01/30 面试题
师德师风演讲稿
2014/05/05 职场文书
考试保密承诺书
2014/08/30 职场文书
领导干部群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书