博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python中is、id、==与浅拷贝和深拷贝
阅读量:5889 次
发布时间:2019-06-19

本文共 837 字,大约阅读时间需要 2 分钟。

python中的3个常见操作符is、id、==,三个的使用方法和应用场景不近相同,有各自适合的应用场景

is:用于比较两个对应是否是同一个引用

==:用于比较两个之是否相同
id:用于获取对象的内存地址

id(5)1492768624a = 4b = 4a == bTruea is bTruea = 257b = 257a == bTruea is bFalse

两个人数值对象都是4的时候他们的值相等,他们的引用也相同,但是当两个对象值为257的时候,他们的引用就不相同了,为什么出现这种原因?

这是因为python的内存管理机制,对于数值而言,在[-5,257)之间的数值对象他们共用一个对象,即都指向一个内存地址。

a = 4b = 4id(a)1492768608id(b)1492768608

可见在内存中的地址是一样的,一个对象,[-5,257)之间的数值是已经建好的,即使我们所谓的创建,对于程序而言也不是创建只不过增加了一个引用。

深拷贝、浅拷贝
深拷贝是在内存中在创建一个相同的对象,而浅拷贝是给对象增加一个引用,用一个比喻来形容:一个txt文本,在桌面创建快捷方式是浅拷贝,复制这个txt文件是深拷贝,那么删除一个快捷方式不会影响到原文件,但是删除一个原文件的复制文件,那么就是真的删除了一个文件。
python中copy模块提供了对象拷贝的深拷贝和浅拷贝模式,分别是copy.deepcopy()、copy.copy()。

a = 'dsasdsd'b = copy.copy(a)c = copy.deepcopy(a)id(a)80379424id(b)80379424id(c)80379424

上面案例中创建了一个字符串对象a,通过浅拷贝和深拷贝分别创建了另两个对象bc,那么他们的内存地址为什么是一样的。

这是受益于python的共享机制,对于不可变的单个字符、不可变字符串是共享对象,相同的对象是指向一个内存地址。
更对机制等待各位深入。

转载地址:http://orgix.baihongyu.com/

你可能感兴趣的文章
配置ORACLE 11g绿色版客户端和PLSQL远程连接环境
查看>>
wordpress wp_head()函数 浏览器顶部 空白28px 解决办法
查看>>
读书笔记:改变人心的技巧
查看>>
poj1135
查看>>
MATLAB实现频数表——hist的使用
查看>>
iphone 线程 NSCondition NSThread
查看>>
NSURLConnection下载文件并显示进度(HEAD)
查看>>
在Firefox中使用超级Bookmarklet
查看>>
Content type and column用法示例代码来自SharePoint会议
查看>>
JAVA开发常用类(五)
查看>>
设置让EditPlus不产生BAK文件
查看>>
php内置函数实例教程
查看>>
为了有利于保护安全性,Internet 已限制网页运行可以访问计算机的脚本……”...
查看>>
设计模式:外观模式(Façade Pattern)
查看>>
VC:画图
查看>>
ASP.NET中 DataList(数据列表)的使用前台绑定
查看>>
Entity Framework Code First 的用途 和 原理 -摘自网络
查看>>
百度api基本功能与dragging事件的实现
查看>>
iphone开发必知点之--app本地化
查看>>
详细介绍ORACLE sqlplus命令(转)
查看>>