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和双等于号的区别/

标签:python,is,双等于号
0
投稿

猜你喜欢

  • Python中dictionary items()系列函数的用法实例

    2023-11-23 08:03:03
  • Python搭建HTTP服务过程图解

    2023-08-08 22:11:54
  • Python中的异常处理try/except/finally/raise用法分析

    2023-12-11 21:37:41
  • python绘图pyecharts+pandas的使用详解

    2022-02-03 18:00:44
  • php checkbox复选框值的获取与checkbox默认值输出方法

    2023-11-14 13:41:12
  • SQL Server双服务器架设并数据自动同步教程

    2023-07-03 02:59:53
  • Go中如何使用set的方法示例

    2024-04-28 10:47:19
  • SQL Server:触发器实例详解

    2024-01-26 03:25:47
  • 一步步教你MySQL查询优化分析教程

    2024-01-27 09:56:23
  • python中sys模块的介绍与实例

    2022-11-29 12:37:51
  • python读取csv文件示例(python操作csv)

    2023-02-28 23:12:02
  • asp 数组 重复删除函数代码

    2011-03-03 10:47:00
  • python随机获取列表中某一元素的方法

    2023-08-23 18:25:13
  • Oracle 数据显示 横表转纵表

    2009-07-26 08:57:00
  • python抢购软件/插件/脚本附完整源码

    2021-04-25 22:03:17
  • python pyaudio音频录制的实现

    2022-03-13 08:44:31
  • SQL中DATEADD和DATEDIFF的用法示例介绍

    2024-01-27 16:57:58
  • Python实现B站UP主小助手详解开发流程

    2021-04-27 03:26:17
  • asp如何在数据库中用好Transaction?

    2010-06-22 21:07:00
  • Python yield与实现方法代码分析

    2022-06-27 10:16:34
  • asp之家 网络编程 m.aspxhome.com