python运算符中如何选择is和==?
2023-03-20 15:25:51 时间
我们在数学中想要判断两个对象是否相等,可以使用=号。在python中由于比较的数据不一定是数值,所以我们的符号有is和==可以选择。那么在不同的条件下,选择is还是==是有所不同的。下面我们在身份运算符中寻找is和==在判断对象引用上的区别,帮助大家在使用身份运算符时能更好的选择,具体内容如下:
身份运算符是用来判断两个变量是否是引用了相同内存地址的运算符。
两个变量的值相等,它们不一定就是引用了相同的内存地址,但如果两个变量引用了相同的内存地址,那么他们的值必然相等。
身份运算符说白了其实就是is符号。它可以用来比较两个变量是否引用了同一个对象。
>>> a = 3 >>> id(a) 140602638349720 >>> hex(id(a)) # 还原成我们看着更顺眼的16进制,但是本文以10进制地址为主(因为懒) '0x7fe09a503598'
顾名思义,is是“相同”,而==是指两者之间的”相等“关系。所谓相同,比较的是两者之间的在内存中的位置,
>>> a = 3 >>> id(a) 140602638349720 >>> b = 3 # b指向的是和a指向的同一块地址(但是并不意味这改变了a,b也会相应改变) >>> id(b) 140602638349720 >>> c = a # a的引用复制给c,在内存中其实是指向了用一个对象 >>> id(c) 140602638349720 >>> a is b True >>> a is c True >>> b is c True
我们看到,上面a,b,c的地址相同,所以他们互相之间”相同“
而相等则两者之间的数值对应相等
>>> a = 3 >>> b = a >>> a = 4 >>> b 3 >>> a = [3] >>> b = [3] >>> id(a) 4351374184 >>> id(b) 4351374112 >>> a is b False >>> a == b True >>> a[0] = 4 >>> b [3] >>> a = [3] >>> b = a # b就是a的引用,占得是同一块地址,而且当a的内容改变时,b也会随之改变,这和上面 # int对象不同,我也不知道为啥要这么搞。 >>> a[0] = 4 >>> b [4]
很多人看到这肯定是一锅浆糊了,其实就是一个原则,能用==就不用is。除了一种情况,那就是判断对象是否是None。
>>> if a is None: ... pass
以上就是我们本篇探究python运算符中在不同的情况下选择is还是==,相信大家已经明白两个的区别和用法了,小编还是推荐使用==多一点。
相关文章
- python 文件操作
- 《Python数据挖掘:概念、方法与实践》扩展你的数据挖掘工具箱
- 《Python数据挖掘:概念、方法与实践》关联规则挖掘
- 《Python数据挖掘:概念、方法与实践》导读
- 《Spark 官方文档》Spark配置(二)
- 《Spark 官方文档》在YARN上运行Spark
- 《 Python数据可视化》导读
- 《Spark官方文档》集群模式概览
- PostgreSQL · 实现分析 · PostgreSQL 10.0 并行查询和外部表的结合
- TaoBeier 的 Vim 配置,支持 Python、Javascript、Golang 等
- 在Linux上使用Python和Flask创建你的第一个应用
- 《Ansible权威指南》一1.4 Ansible是如何工作的
- 《Ansible权威指南》一1.8 Python多环境扩展管理
- 《Ansible权威指南》一1.8 Python多环境扩展管理
- 《Ansible权威指南》一2.3 Ansible命令用法详解
- 《Ansible权威指南》一2.4 Ansible系列命令用法详解与使用场景介绍
- 《Ansible权威指南》一3.2 Ad-Hoc命令集介绍
- 《Ansible权威指南》一3.3 Ad-Hoc组管理和特定主机变更
- 《Ansible权威指南》一3.4 Ad-Hoc用户与组管理
- 如何在 Shell 脚本中执行语法检查调试模式