python中引用与复制用法实例分析


Posted in Python onJune 04, 2015

本文实例讲述了python中引用与复制用法。分享给大家供大家参考。具体分析如下:

在python中,任何不可变对象是传值的,而可变对象是传引用的。

不管是向函数传递参数或者是任何形式的对象复制来说,不可变对象(比如整数,字符串)被真正复制,而可变对象只是复制了一个对他们的引用,即在内存中只有一份对象,而引用两份。
 
a=b 这样的赋值,就会创建对b的引用,对于象数字和字符串这样的不可变的对象,这种赋值实际是创建了b的一个副本

>>> a='hello'
>>> b=a
>>> id(a)
29326432
>>> id(b)
29326432
>>> b is a
True
>>> a=1000
>>> b
'hello'

对于可变对象,比如字典和列表,a和b引用的是同一个对象,修改其中任意一个变量都会影响到另一个。

>>> a=[1,2,3,4]
>>> b=a
>>> id(a)
29280896
>>> id(b)
29280896
>>> b[3]='ccccccccc'
>>> a
[1, 2, 3, 'ccccccccc']
>>>

列表和字典这样的容器对象,可以使用两种赋值操作:浅复制和深复制。浅复制创建一个新对象,但它包含的是对原始对象中包含的项的引用。

比如下面的浅复制:

>>> a=[1,2,3,4,[9,0]]
>>> b=a
>>> a=[1,2,3,4,[9,0]]
>>> b=list(a)
>>> b is a
False
>>> b[0]=1000
>>> b
[1000, 2, 3, 4, [9, 0]] #注意,b修改了b[0]以后,对a没有影响
>>> a
[1, 2, 3, 4, [9, 0]]
>>> b[4][1]='cccc'  #注意,b修改了 b[4][1]以后,对a有影响
>>> b
[1000, 2, 3, 4, [9, 'cccc']]
>>> a
[1, 2, 3, 4, [9, 'cccc']]

深复制将创建一个新对象,并且递归的复制它包含的所有对象,没有内置对象可以创建深复制,可以使用copy.deepcopy()函数完成。

>>> import copy
>>> a=[1,2,3,[4,5]]
>>> b=copy.deepcopy(a)
>>> id(b)
29582240    
>>> id(a)
29581840
>>> a is b
False
>>> b[0]=1000
>>> b
[1000, 2, 3, [4, 5]] #注意修改了b[0]之后对a没有影响
>>> a
[1, 2, 3, [4, 5]]
>>> b[3][1]='gggg'
>>> b
[1000, 2, 3, [4, 'gggg']] #修改了 b[3][1]之后对a也没有影响,这是和浅复制的区别
>>> a
[1, 2, 3, [4, 5]]

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
打印出python 当前全局变量和入口参数的所有属性
Jul 01 Python
python使用win32com库播放mp3文件的方法
May 30 Python
Python爬虫文件下载图文教程
Dec 23 Python
使用Python快速制作可视化报表的方法
Feb 03 Python
python分布式编程实现过程解析
Nov 08 Python
关于tf.reverse_sequence()简述
Jan 20 Python
python函数enumerate,operator和Counter使用技巧实例小结
Feb 22 Python
python如何将两张图片生成为全景图片
Mar 05 Python
Python基于Hypothesis测试库生成测试数据
Apr 29 Python
django模板获取list中指定索引的值方式
May 14 Python
python 删除excel表格重复行,数据预处理操作
Jul 06 Python
Python使用socket_TCP实现小文件下载功能
Oct 09 Python
Python进程间通信用法实例
Jun 04 #Python
python中__slots__用法实例
Jun 04 #Python
python协程用法实例分析
Jun 04 #Python
Python获取系统默认字符编码的方法
Jun 04 #Python
python中__call__内置函数用法实例
Jun 04 #Python
python抽象基类用法实例分析
Jun 04 #Python
python基于multiprocessing的多进程创建方法
Jun 04 #Python
You might like
php计算多维数组中所有值总和的方法
2015/06/24 PHP
微信支付的开发流程详解
2016/09/13 PHP
PHP实现防盗链的方法分析
2017/07/25 PHP
PHP的new static和new self的区别与使用
2019/11/27 PHP
JavaScript高级程序设计阅读笔记(六) ECMAScript中的运算符(二)
2012/02/27 Javascript
纯javascript实现的小游戏《Flappy Pig》实例
2015/07/27 Javascript
JS在onclientclick里如何控制onclick的执行
2016/05/30 Javascript
JS获取当前页面名称的简单实例
2016/08/19 Javascript
AngularJS 2.0入门权威指南
2016/10/08 Javascript
用jquery的attr方法实现图片切换效果
2017/02/05 Javascript
AngularJS实现select的ng-options功能示例
2017/07/12 Javascript
jQuery扇形定时器插件pietimer使用方法详解
2017/07/18 jQuery
Vue中引入样式文件的方法
2017/08/18 Javascript
关于redux-saga中take使用方法详解
2018/02/27 Javascript
JavaScript反射与依赖注入实例详解
2018/05/29 Javascript
vue.js使用v-model实现父子组件间的双向通信示例
2020/02/05 Javascript
[28:42]Ti4正赛VG vs NEWBEE1
2014/07/19 DOTA
python通过cookie模拟已登录状态的初步研究
2016/11/09 Python
python实现数独游戏 java简单实现数独游戏
2018/03/30 Python
在Python中构建增广矩阵的实现方法
2019/07/01 Python
python版百度语音识别功能
2019/07/09 Python
通过python实现弹窗广告拦截过程详解
2019/07/10 Python
Django中使用极验Geetest滑动验证码过程解析
2019/07/31 Python
关于jupyter打开之后不能直接跳转到浏览器的解决方式
2020/04/13 Python
200行python代码实现贪吃蛇游戏
2020/04/24 Python
为智能设备设计个性化保护套网站:caseable
2017/01/05 全球购物
Coach澳大利亚官方网站:美国著名时尚奢侈品牌
2017/05/24 全球购物
Kate Spade澳大利亚官方网站:美国设计师手袋品牌
2019/09/10 全球购物
教学大赛获奖感言
2014/01/15 职场文书
高级编程求职信模板
2014/02/16 职场文书
另类冲刺标语
2014/06/24 职场文书
整改报告格式
2014/11/06 职场文书
2015年青年志愿者工作总结
2015/05/20 职场文书
电影复兴之路观后感
2015/06/02 职场文书
一条慢SQL语句引发的改造之路
2022/03/16 MySQL
关于windows server 2012 DC 环境 重启后蓝屏代码:0xc00002e2的问题
2022/05/25 Servers