python中is与双等于号“==”的区别示例详解
作者:Jason Hu 时间:2023-07-09 22:40:19
前言
在开始本文之前,首先要知道Python中对象包含的三个基本要素,分别是:id(身份标识)、python type()(数据类型)和value(值)。is和==都是对对象进行比较判断作用的,但对对象比较判断的内容并不相同。下面来看看具体区别在哪。
发现问题
最近在给小伙伴写段小代码用于爬取一个GIS的各高层数据,python中使用了”is”来代替”==”,结果下载至512的时候出了问题。
代码如下
def get_next(x, y, z):
z += 1
if z is 2**x: # 应该用if z == 2**x
y += 1
z = 0
if y is 2**(x+1):
x += 1
y = 0
return x, y, z
这是用来获取下一个高层数据的URL的函数,结果第二天,小伙伴告诉我说下载到x == 9, y == 0, z == 512的时候停止下载了。
探索
首先,根据上述代码可以知道,z按照逻辑是不可能等于512的,所有开始怀疑是不是这个函数有问题,但是这么简单的函数,怎么看都不应该有问题啊。于是开始跟代码,发现
if z is 2**x
处,x == 9, y == 0, z == 512时,if后面居然返回的是False。我拿计算器算了好几遍,确定自己不是在二次元后,开始怀疑is的问题。
结果
在StackOverflow上面找到了答案
Is there a difference between == and is in Python?
is will return True if two variables point to the same object, == if the objects referred to by the variables are equal.
>>> a = [1, 2, 3]
>>> b = a
>>> b is a
True
>>> b == a
True
>>> b = a[:]
>>> b is a
False
>>> b == a
True
In your case, the second test only works because Python caches small integer objects, which is an implementation detail. For larger integers, this does not work:
>>> 1000 is 10**3
False
>>> 1000 == 10**3
True
然后自己写了个小段子看看最大的可复用的int是多大
a = 0
b = 0
while a is b:
a += 1
b += 1
最后发现最大是256。
小结:
==比较操作符:用来比较两个对象是否相等,value做为判断因素;
is同一性运算符:比较判断两个对象是否相同,id做为判断因素。
来源:http://0xng.com/2017/11/21/python中is和双等于号的区别/
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Python中dictionary items()系列函数的用法实例
Python搭建HTTP服务过程图解
![](https://img.aspxhome.com/file/2023/1/62291_0s.png)
Python中的异常处理try/except/finally/raise用法分析
python绘图pyecharts+pandas的使用详解
![](https://img.aspxhome.com/file/2023/9/127089_0s.jpg)
php checkbox复选框值的获取与checkbox默认值输出方法
SQL Server双服务器架设并数据自动同步教程
Go中如何使用set的方法示例
SQL Server:触发器实例详解
一步步教你MySQL查询优化分析教程
python中sys模块的介绍与实例
python读取csv文件示例(python操作csv)
asp 数组 重复删除函数代码
python随机获取列表中某一元素的方法
Oracle 数据显示 横表转纵表
python抢购软件/插件/脚本附完整源码
python pyaudio音频录制的实现
![](https://img.aspxhome.com/file/2023/8/115758_0s.png)
SQL中DATEADD和DATEDIFF的用法示例介绍
Python实现B站UP主小助手详解开发流程
![](https://img.aspxhome.com/file/2023/3/117443_0s.jpg)