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 相关文章推荐
Python3实现从文件中读取指定行的方法
May 22 Python
基于Linux系统中python matplotlib画图的中文显示问题的解决方法
Jun 15 Python
python实现闹钟定时播放音乐功能
Jan 25 Python
浅谈python日志的配置文件路径问题
Apr 28 Python
Pycharm远程调试原理及具体配置详解
Aug 08 Python
Python发送邮件的实例代码讲解
Oct 16 Python
浅谈python中统计计数的几种方法和Counter详解
Nov 07 Python
python使用pandas抽样训练数据中某个类别实例
Feb 28 Python
python修改linux中文件(文件夹)的权限属性操作
Mar 05 Python
Python urllib库如何添加headers过程解析
Oct 05 Python
Django websocket原理及功能实现代码
Nov 14 Python
python 使用csv模块读写csv格式文件的示例
Dec 02 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读取文件内容的五种方式
2015/12/28 PHP
Yii2 rbac权限控制操作步骤实例教程
2016/04/29 PHP
thinkphp中多表查询中防止数据重复的sql语句(必看)
2016/09/22 PHP
ecshop添加菜单及权限分配问题
2017/11/21 PHP
javascript date格式化示例
2013/09/25 Javascript
js字符串日期yyyy-MM-dd转化为date示例代码
2014/03/06 Javascript
Javascript BOM学习小结(六)
2015/11/26 Javascript
jQuery实现简单的点赞效果
2020/05/29 Javascript
Bootstrap CSS组件之导航条(navbar)
2016/12/17 Javascript
JS封装通过className获取元素的函数示例
2016/12/20 Javascript
Bootstrap select多选下拉框实现代码
2016/12/23 Javascript
前端主流框架vue学习笔记第二篇
2017/07/26 Javascript
Angular移动端页面input无法输入的解决方法
2017/11/14 Javascript
10分钟彻底搞懂Http的强制缓存和协商缓存(小结)
2018/08/30 Javascript
浅谈angularJs函数的使用方法(大小写转换,拷贝,扩充对象)
2018/10/08 Javascript
MockJs结合json-server模拟后台数据
2020/08/26 Javascript
Vue解析剪切板图片并实现发送功能
2020/02/04 Javascript
非常漂亮的js烟花效果
2020/03/10 Javascript
JavaScript indexOf()原理及使用方法详解
2020/07/09 Javascript
Python使用email模块对邮件进行编码和解码的实例教程
2016/07/01 Python
python+selenium实现登录账户后自动点击的示例
2017/12/22 Python
Python程序员面试题 你必须提前准备!
2018/01/16 Python
Python随机函数random()使用方法小结
2018/04/29 Python
python 将数据保存为excel的xls格式(实例讲解)
2018/05/03 Python
python flask解析json数据不完整的解决方法
2019/05/26 Python
搭建python django虚拟环境完整步骤详解
2019/07/08 Python
Python函数基本使用原理详解
2020/03/19 Python
python 获取计算机的网卡信息
2021/02/18 Python
Canvas图片分割效果的实现
2019/07/29 HTML / CSS
说谎欺骗人检讨书300字
2014/11/18 职场文书
2014年实验室工作总结
2014/12/03 职场文书
企业百日安全活动总结
2015/05/07 职场文书
干部考核工作总结
2015/08/12 职场文书
网络研修心得体会
2016/01/08 职场文书
解析python中的jsonpath 提取器
2022/01/18 Python
css样式important规则的正确使用方式
2022/06/10 HTML / CSS