python中is与双等于号“==”的区别示例详解


Posted in Python onNovember 21, 2017

前言

在开始本文之前,首先要知道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做为判断因素。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
Python语言实现机器学习的K-近邻算法
Jun 11 Python
Python基础语法(Python基础知识点)
Feb 28 Python
Python使用time模块实现指定时间触发器示例
May 18 Python
Python3 加密(hashlib和hmac)模块的实现
Nov 23 Python
Python cookbook(数据结构与算法)实现优先级队列的方法示例
Feb 18 Python
快速解决pandas.read_csv()乱码的问题
Jun 15 Python
Python离线安装PIL 模块的方法
Jan 08 Python
Python进阶之@property动态属性的实现
Apr 01 Python
pandas分区间,算频率的实例
Jul 04 Python
基于Python的一个自动录入表格的小程序
Aug 05 Python
Python3合并两个有序数组代码实例
Aug 11 Python
基于python实现简单C/S模式代码实例
Sep 14 Python
Python使用PIL模块生成随机验证码
Nov 21 #Python
Python3中条件控制、循环与函数的简易教程
Nov 21 #Python
Python3 循环语句(for、while、break、range等)
Nov 20 #Python
Python虚拟环境项目实例
Nov 20 #Python
Python插件virtualenv搭建虚拟环境
Nov 20 #Python
使用tensorflow实现AlexNet
Nov 20 #Python
Django在win10下的安装并创建工程
Nov 20 #Python
You might like
php学习笔记 数组的常用函数
2011/06/13 PHP
基于php常用正则表达式的整理汇总
2013/06/08 PHP
thinkphp中memcache的用法实例
2014/11/29 PHP
php中将一个对象保存到Session中的方法
2015/03/13 PHP
详解PHP中instanceof关键字及instanceof关键字有什么作用
2015/11/05 PHP
php自定义中文字符串截取函数substr_for_gb2312及substr_for_utf8示例
2016/05/28 PHP
php实现用户登陆简单实例
2017/04/04 PHP
thinkphp5.1 文件引入路径问题及注意事项
2018/06/13 PHP
PHP PDOStatement::execute讲解
2019/01/31 PHP
jquery.mobile 共同布局遇到的问题小结
2015/02/10 Javascript
javascript去掉代码里面的注释
2015/07/24 Javascript
原生JS实现图片轮播效果
2016/12/26 Javascript
详解vue嵌套路由-query传递参数
2017/05/23 Javascript
详解基于vue-cli3.0如何构建功能完善的前端架子
2018/10/09 Javascript
使用 Jest 和 Supertest 进行接口端点测试实例详解
2020/04/25 Javascript
Python获取脚本所在目录的正确方法
2014/04/15 Python
python如何实现反向迭代
2018/03/20 Python
python opencv检测目标颜色的实例讲解
2018/04/02 Python
Python利用递归实现文件的复制方法
2018/10/27 Python
python读取目录下最新的文件夹方法
2018/12/24 Python
纯CSS3打造属于自己的“小黄人”
2016/03/14 HTML / CSS
Html5 Canvas 实现一个“刮刮乐”游戏
2019/09/05 HTML / CSS
世界上最大的网络主机公司:1&1
2016/10/12 全球购物
维珍澳洲航空官网:Virgin Australia
2017/09/08 全球购物
英国DVD和蓝光碟片购买网站:Zoom.co.uk(电影和电视)
2019/09/23 全球购物
舞蹈教育学专业推荐信
2013/11/27 职场文书
优秀的茶餐厅创业计划书
2014/01/03 职场文书
关于毕业的广播稿
2014/01/10 职场文书
数控专业个人求职信范文
2014/02/05 职场文书
法定代表人授权委托书范本
2014/10/07 职场文书
2014年药剂科工作总结
2014/11/26 职场文书
通用员工手册范本
2015/05/14 职场文书
贫困证明书范文
2015/06/16 职场文书
发言稿之优秀教师篇
2019/09/26 职场文书
原生CSS实现文字无限轮播的通用方法
2021/03/30 HTML / CSS
Redis 限流器
2022/05/15 Redis