开发者社区> python之战> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

python中is、id、==与浅拷贝和深拷贝

简介: python中的3个常见操作符is、id、==,三个的使用方法和应用场景不近相同,有各自适合的应用场景 is:用于比较两个对应是否是同一个引用==:用于比较两个之是否相同id:用于获取对象的内存地址 id(5) 1492768624 a = 4 b = 4 a == b True a is b T...
+关注继续查看

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

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

id(5)
1492768624
a = 4
b = 4
a == b
True
a is b
True
a = 257
b = 257
a == b
True
a is b
False

两个人数值对象都是4的时候他们的值相等,他们的引用也相同,但是当两个对象值为257的时候,他们的引用就不相同了,为什么出现这种原因?
这是因为python的内存管理机制,对于数值而言,在[-5,257)之间的数值对象他们共用一个对象,即都指向一个内存地址。

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

可见在内存中的地址是一样的,一个对象,[-5,257)之间的数值是已经建好的,即使我们所谓的创建,对于程序而言也不是创建只不过增加了一个引用。
深拷贝、浅拷贝
深拷贝是在内存中在创建一个相同的对象,而浅拷贝是给对象增加一个引用,用一个比喻来形容:一个txt文本,在桌面创建快捷方式是浅拷贝,复制这个txt文件是深拷贝,那么删除一个快捷方式不会影响到原文件,但是删除一个原文件的复制文件,那么就是真的删除了一个文件。
python中copy模块提供了对象拷贝的深拷贝和浅拷贝模式,分别是copy.deepcopy()、copy.copy()。

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

上面案例中创建了一个字符串对象a,通过浅拷贝和深拷贝分别创建了另两个对象bc,那么他们的内存地址为什么是一样的。
这是受益于python的共享机制,对于不可变的单个字符、不可变字符串是共享对象,相同的对象是指向一个内存地址。
更对机制等待各位深入。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Python高级语法1:GIL锁&浅拷贝&深拷贝
Python高级语法1:GIL锁&浅拷贝&深拷贝
22 0
学习Python一年,这次终于弄懂了浅拷贝和深拷贝
学习Python一年,这次终于弄懂了浅拷贝和深拷贝
46 0
Python中浅拷贝和深拷贝的理解与研究
Python中浅拷贝和深拷贝的理解与研究 单层浅拷贝 import copy a = 1 # 不可变数据类型 copy_a = copy.copy(a) print(id(a),id(copy_a)) # 内存地址相同 a = [1,2] # 可变数据类型 copy_a = copy.
1115 0
Python学习笔记之浅拷贝和深拷贝
在Python中对象的复制有三种一般的复制,浅拷贝,深拷贝,那么他们有什么区别呢
1329 0
提高代码可重用性, 减少重复劳动 -- 手把手带你 Python 自定义模块并上传到 pypi, 贡献自己创造的轮子为所有人使用, 让 Python 开发更简单
我们都知道程序中可通过定义函数来减少工作量,提高代码的可重用性,从而提高我们的开发效率.我们一直import的是别人的模块,那如果我们需要使用自己的模块,或者开发一个自己的模块供别人使用,我们自己造轮子该怎么做呢? 我们实际的开发中,只在一个文件中编写代码是不太可能的,当开发大型项目的时候,一个文件过于臃肿,第一个是不利于阅读,代码可读性极差,还不利于团队协作开,所以这时候我们需要引入模块的概念.下面我们来了解什么是模块
35 0
初探Python标准库~【八个自带模块的妙用】
初探Python标准库~【八个自带模块的妙用】
8 0
Python编程:paramiko模块远程登录
Python编程:paramiko模块远程登录
55 0
Python编程:itertools模块
Python编程:itertools模块
44 0
+关注
python之战
专注python学习与应用擅长爬虫、web、全栈,专注RPA技术实施;(个人公号:Python之战)
90
文章
0
问答
来源圈子
更多
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载