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中os模块详解
Oct 14 Python
python用Pygal如何生成漂亮的SVG图像详解
Feb 10 Python
python+selenium+autoit实现文件上传功能
Aug 23 Python
TensorFlow 滑动平均的示例代码
Jun 19 Python
Python pandas.DataFrame调整列顺序及修改index名的方法
Jun 21 Python
对python中不同模块(函数、类、变量)的调用详解
Jul 16 Python
使用Python制作表情包实现换脸功能
Jul 19 Python
Django处理Ajax发送的Get请求代码详解
Jul 29 Python
简单的Python调度器Schedule详解
Aug 30 Python
Python 获取项目根路径的代码
Sep 27 Python
Tensorflow训练模型越来越慢的2种解决方案
Feb 07 Python
使用scrapy ImagesPipeline爬取图片资源的示例代码
Sep 28 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新手上路(二)
2006/10/09 PHP
php仿QQ验证码的实例分析
2013/07/01 PHP
destoon安全设置中需要设置可写权限的目录及文件
2014/06/21 PHP
基于php的CMS中展示文章类实例分析
2015/06/18 PHP
PHP面向对象程序设计类的定义与用法简单示例
2016/12/27 PHP
php处理抢购类功能的高并发请求
2018/02/08 PHP
javascript IE中的DOM ready应用技巧
2008/07/23 Javascript
ext 同步和异步示例代码
2009/09/18 Javascript
Javascript实现带关闭按钮的网页漂浮广告代码
2014/01/12 Javascript
函数window.open实现关闭所有的子窗口
2015/08/03 Javascript
JS+CSS3实现超炫的散列画廊特效
2016/07/16 Javascript
javascript封装addLoadEvent实现页面同时加载执行多个函数的方法
2016/07/25 Javascript
基于JavaScript实现轮播图原理及示例
2020/04/10 Javascript
bootstrap的工具提示实例代码
2017/05/17 Javascript
微信小程序 实现点击添加移除class
2017/06/12 Javascript
JavaScript实现重力下落与弹性效果的方法分析
2017/12/20 Javascript
解决vue router组件状态刷新消失的问题
2018/08/01 Javascript
微信小程序实现文件、图片上传功能
2020/08/18 Javascript
多个vue子路由文件自动化合并的方法
2019/09/03 Javascript
[55:45]DOTA2上海特级锦标赛D组败者赛 Liquid VS COL第一局
2016/02/28 DOTA
Python实现发送email的几种常用方法
2014/08/18 Python
python执行等待程序直到第二天零点的方法
2015/04/23 Python
Python实现的视频播放器功能完整示例
2018/02/01 Python
Django2.1.3 中间件使用详解
2018/11/26 Python
使用Python操作FTP实现上传和下载的方法
2019/04/01 Python
python的turtle库使用详解
2019/05/10 Python
利用OpenCV和Python实现查找图片差异
2019/12/19 Python
HTML5操作WebSQL数据库的实例代码
2017/08/26 HTML / CSS
我们的节日春节活动方案
2014/08/22 职场文书
同意迁入证明模板
2014/10/26 职场文书
公务员年度个人总结
2015/02/12 职场文书
2015圣诞节贺卡寄语
2015/03/24 职场文书
庆祝教师节新闻稿
2015/07/17 职场文书
小学同学聚会感言
2015/07/30 职场文书
礼仪培训心得体会
2016/01/22 职场文书
如何用PHP实现分布算法之一致性哈希算法
2021/05/26 PHP