Python中运算符"=="和"is"的详解


Posted in Python onOctober 08, 2016

前言

在讲is和==这两种运算符区别之前,首先要知道Python中对象包含的三个基本要素,分别是:id(身份标识)、python type()(数据类型)和value(值)。is和==都是对对象进行比较判断作用的,但对对象比较判断的内容并不相同。下面来看看具体区别在哪。

Python中比较两个对象是否相等,一共有两种方法,简单来说,它们的区别如下:

     is是比较两个引用是否指向了同一个对象(引用比较)。

     ==是比较两个对象是否相等。

>>> a = [1, 2, 3]
>>> b = a
>>> b is a # a的引用复制给b,他们在内存中其实是指向了用一个对象
True 
>>> b == a # 当然,他们的值也是相等的
True
>>> b = a[:] # b通过a切片获得a的部分,这里的切片操作重新分配了对象,
>>> b is a # 所以指向的不是同一个对象了
False
>>> b == a # 但他们的值还是相等的
True

实现原理

is比较的是两者是否是同一个对象,所以比较的是内存地址(id是否相同)。

==是值比较。不可变对象,例如int,str,它会直接进行值比较。对于Python已知的对象,会调用他们的__eq__函数来比较。(其实已知的对象应该也是通过内置的__eq__函数来比较的)。对于自定义的对象,如果实现了__eq__函数,就会使用它比较,如果没有实现,效果和==是一样的。

对象缓存机制

Python会对比较小的对象缓存,下次用到比较小的对象时,会去缓存区查找,如果找到,不会再开辟新的内存,而是继续把小对象的地址赋给新的值。例子:

>>> c = 1
>>> d = 1
>>> print(c is d) 
True
 
>>> 1000 is 10**3
False
>>> 1000 == 10**3
True

通过计算得到的赋值,不会使用缓存区。从第一个代码示例中可以看出。

对于字符串,你可以通过使用intern函数强制使用缓存区。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

Python 相关文章推荐
python实现人人网登录示例分享
Jan 19 Python
Python用GET方法上传文件
Mar 10 Python
Python常见格式化字符串方法小结【百分号与format方法】
Sep 18 Python
pandas.DataFrame 根据条件新建列并赋值的方法
Apr 08 Python
Python语言快速上手学习方法
Dec 14 Python
详解Appium+Python之生成html测试报告
Jan 04 Python
使用python Telnet远程登录执行程序的方法
Jan 26 Python
python logging模块的使用总结
Jul 09 Python
Python requests模块基础使用方法实例及高级应用(自动登陆,抓取网页源码)实例详解
Feb 14 Python
解决Jupyter notebook更换主题工具栏被隐藏及添加目录生成插件问题
Apr 20 Python
Python txt文件常用读写操作代码实例
Aug 03 Python
使用Python快速打开一个百万行级别的超大Excel文件的方法
Mar 02 Python
Python 爬虫多线程详解及实例代码
Oct 08 #Python
python字符串,数值计算
Oct 05 #Python
python制作企业邮箱的爆破脚本
Oct 05 #Python
python爬取NUS-WIDE数据库图片
Oct 05 #Python
python2.7的编码问题与解决方法
Oct 04 #Python
Python Sqlite3以字典形式返回查询结果的实现方法
Oct 03 #Python
Python实现屏幕截图的代码及函数详解
Oct 01 #Python
You might like
php数组对百万数据进行排除重复数据的实现代码
2010/06/08 PHP
一个典型的PHP分页实例代码分享
2011/07/28 PHP
解决文件名解压后乱码的问题 将文件名进行转码的代码
2012/01/10 PHP
php的ZipArchive类用法实例
2014/10/20 PHP
ThinkPHP模板之变量输出、自定义函数与判断语句用法
2014/11/01 PHP
php实现的单一入口应用程序实例分析
2015/09/23 PHP
PHP动态地创建属性和方法, 对象的复制, 对象的比较,加载指定的文件,自动加载类文件,命名空间
2016/05/06 PHP
简洁短小的 JavaScript IE 浏览器判定代码
2010/03/21 Javascript
JQuery中$.ajax()方法参数详解及应用
2013/12/12 Javascript
jquery 自定义容器下雨效果可将下雨图标改为其他
2014/04/23 Javascript
c#+jquery实现获取radio和checkbox的值
2020/09/12 Javascript
js实现延时加载Flash的方法
2015/11/26 Javascript
JS动态给对象添加属性和值的实现方法
2016/10/21 Javascript
jQuery简单实现对数组去重及排序操作实例
2017/10/31 jQuery
element 结合vue 在表单验证时有值却提示错误的解决办法
2018/01/22 Javascript
vue页面加载闪烁问题的解决方法
2018/03/28 Javascript
JS实现区分中英文并统计字符个数的方法示例
2018/06/09 Javascript
jquery实现联想词搜索框和搜索结果分页的示例
2018/10/10 jQuery
详解vue在项目中使用百度地图
2019/03/26 Javascript
Vue自定义表单内容检查rules实例
2020/10/30 Javascript
使用js获取身份证年龄的示例代码
2020/12/11 Javascript
python导入时小括号大作用
2017/01/10 Python
python面向对象_详谈类的继承与方法的重载
2017/06/07 Python
python爬取拉勾网职位数据的方法
2018/01/24 Python
python装饰器-限制函数调用次数的方法(10s调用一次)
2018/04/21 Python
python在OpenCV里实现投影变换效果
2019/08/30 Python
谈谈对css属性box-sizing的了解
2017/01/04 HTML / CSS
牵手50台湾:专为黄金岁月的单身人士而设的交友网站
2021/02/18 全球购物
厨房管理计划书
2014/04/27 职场文书
优秀求职信
2014/05/29 职场文书
大学生工作自荐书
2014/06/16 职场文书
2015年12.4全国法制宣传日活动总结
2015/03/24 职场文书
如何写好一份优秀的工作总结?
2019/06/21 职场文书
你会写报告?产品体验报告到底该怎么写?
2019/08/14 职场文书
Python socket如何解析HTTP请求内容
2022/02/12 Python
Python编写车票订购系统 Python实现快递收费系统
2022/08/14 Python