开发者社区> 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的共享机制,对于不可变的单个字符、不可变字符串是共享对象,相同的对象是指向一个内存地址。
更对机制等待各位深入。

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

相关文章
1_python进阶—浅拷贝、深拷贝
python进阶—浅拷贝、深拷贝
6 0
Python中的浅拷贝与深拷贝
1.浅拷贝,拷贝的程度浅,只拷贝原数据的首地址,然后通过原数据的首地址,去获取内容; 2.深拷贝,拷贝的程度深,自己新开辟了一块内存,将被拷贝内容全部拷贝过来了。
5 0
Python高级语法1:GIL锁&浅拷贝&深拷贝
Python高级语法1:GIL锁&浅拷贝&深拷贝
29 0
学习Python一年,这次终于弄懂了浅拷贝和深拷贝
学习Python一年,这次终于弄懂了浅拷贝和深拷贝
53 0
Python中浅拷贝和深拷贝的理解与研究
Python中浅拷贝和深拷贝的理解与研究 单层浅拷贝 import copy a = 1 # 不可变数据类型 copy_a = copy.copy(a) print(id(a),id(copy_a)) # 内存地址相同 a = [1,2] # 可变数据类型 copy_a = copy.
1125 0
Python学习笔记之浅拷贝和深拷贝
在Python中对象的复制有三种一般的复制,浅拷贝,深拷贝,那么他们有什么区别呢
1340 0
Python编程:获取本机时区
Python编程:获取本机时区
10 0
Python编程:实现tail-n查看日志文件
Python编程:实现tail-n查看日志文件
12 0
Python编程:获取本机时区
Python编程:获取本机时区
10 0
+关注
python之战
专注python学习与应用擅长爬虫、web、全栈,专注RPA技术实施;(个人公号:Python之战)
90
文章
0
问答
来源圈子
更多
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载