Python中is同一性运算符和==相等运算符区别

news/2024/7/3 18:04:44

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

在区分is和==这两种运算符区别之前,需要知道Python中对象包含的三个基本要素,分别是:id(身份标识)、type(数据类型)和value(值)。

==比较对象的value(值)

==是python标准操作符中的比较操作符,用来比较判断两个对象的value(值)是否相等,例如下面两个字符串间的比较:

>>> a = 'cheesezh'
>>> b = 'cheesezh'
>>> a == b
True

is比较对象间的唯一身份标识

is也被叫做同一性运算符,这个运算符比较判断的是对象间的唯一身份标识,也就是id是否相同。如下例子:

>>> x = y = [4,5,6]
>>> z = [4,5,6]
>>> x == y
True
>>> x == z
True
>>> x is y
True
>>> x is z
False
>>>
>>> print id(x)
3075326572
>>> print id(y)
3075326572
>>> print id(z)
3075328140

说明:前三个例子都是True,这是因为x、y和z的值是相同的。至于最后一个为什么是False,比较三个对象的id会发现z的id不一样。

在数值型和字符串型的情况下,及tuple,list,dict或set型的情况下的比较,如下:

>>> a = 1 #a和b为数值类型
>>> b = 1
>>> a is b
True
>>> id(a)
14318944
>>> id(b)
14318944
>>> a = 'cheesezh' #a和b为字符串类型
>>> b = 'cheesezh'
>>> a is b
True
>>> id(a)
42111872
>>> id(b)
42111872
>>> a = (1,2,3) #a和b为元组类型
>>> b = (1,2,3)
>>> a is b
False
>>> id(a)
15001280
>>> id(b)
14790408
>>> a = [1,2,3] #a和b为list类型
>>> b = [1,2,3]
>>> a is b
False
>>> id(a)
42091624
>>> id(b)
42082016
>>> a = {'cheese':1,'zh':2} #a和b为dict类型
>>> b = {'cheese':1,'zh':2}
>>> a is b
False
>>> id(a)
42101616
>>> id(b)
42098736
>>> a = set([1,2,3])#a和b为set类型
>>> b = set([1,2,3])
>>> a is b
False
>>> id(a)
14819976
>>> id(b)
14822256

通过例子可看出,只有数值型和字符串型的情况下,a is b才为True,当a和b是tuple,list,dict或set型时,a is b为False。

 

 

 

转载于:https://my.oschina.net/jennerlo/blog/3010742


http://lihuaxi.xjx100.cn/news/244645.html

相关文章

一个好用 的API 管理工具

大家好,我是磊哥 今天发现了一款国产化的接口测试工具,看它官网中的中文页面,倍感心切,很干净,深度解决了postman 和 swagger 的95%痛点。 这个国产软件就是Eolink,结合了 API 设计、文档管理、自动化测试…

CSS3 @keyframes animate

2019独角兽企业重金招聘Python工程师标准>>> 1.keyframes定义和用法 通过 keyframes 规则,您能够创建动画。 创建动画的原理是,将一套 CSS 样式逐渐变化为另一套样式。 在动画过程中,您能够多次改变这套 CSS 样式。 以百分比来…

页面日期格式化

1.引用<script type"text/javascript" src"/js/xdate.js?version0.001"></script> 2.在页面加载的时候格式化 Date.prototype.Format function (fmt) { var o { "M": this.getMonth() 1, //月份 …

GDB 调试 Mysql 实战(二)GDB 调试打印

背景 在 https://mengkang.net/1328.html 实验中&#xff0c;我们通过optimizer_trace发现group by会使用intermediate_tmp_table&#xff0c;而且里面的的row_length是20&#xff0c;抱着"打破砂锅问到底"的求学精神&#xff0c;所以想通过 gdb 调试源码的方式看这个…

联调这夜,我把同事打了...

体验地址&#xff1a; https://www.eolink.com/?utm\_sourcew2507

在列表显示某个内容,但数据表没有这个字段

1.需求&#xff1a;在出房合同编辑页面添加业务类型内容显示 思路&#xff1a;根据房源编号查询公司房源信息表&#xff0c;获取业务类型&#xff0c;再设置进去 查询性能比较&#xff1a; 1&#xff09; for (HbContractOut entity : page.getContent()) { // 根据房源编号…

FastDFS之Linux下搭建

1.软件环境 CentOS6.5 FastDFS v5.05 libfastcommon- - master.zip&#xff08;是从 FastDFS 和 FastDHT 中提取出来的公共 C 函数库&#xff09; fastdfs- - nginx- - module_v1.16.tar.gz nginx- - 1.6.2.tar.gz fastdfs_client_java._v1.25.tar.gz 2.FastDFS集群规划 描述 …

flex版的流程设计器

第一章 介绍 1.1 编写目的 介绍流程设计软件并且简单附上使用说明。因为还不是很完善&#xff0c;所以希望大家能多提出自己的意见的见解。 1.2 基本结构 1.3 使用技术 主要使用flex技术做前端的页面&#xff0c;后端使用jbpm4.4做为流程引擎。 第二章 操作 2.1 完整界面 还在不…