Python中有很多运算符,今天我们就来讲讲is和==两种运算符在应用上的本质区别是什么。

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

is和==都是对对象进行比较判断作用的,但对对象比较判断的内容并不相同。下面来看看具体区别在哪。

==比较操作符和is同一性运算符区别

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

例1.

>>> a = 'cheesezh'

>>> b = 'cheesezh'

>>> a == b

True

is也被叫做同一性运算符,这个运算符比较判断的是对象间的唯一身份标识,也就是id是否相同。通过对下面几个list间的比较,你就会明白is同一性运算符的工作原理:

例2.

>>> 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,这什么最后一个是False呢?x、y和z的值是相同的,所以前两个是True没有问题。至于最后一个为什么是False,看看三个对象的id分别是什么就会明白了。

下面再来看一个例子,例3中同一类型下的a和b的(a==b)都是为True,而(a is b)则不然。

例3.

>>> 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

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

python 和 的区别_Python中is和==的区别相关推荐

  1. python 枚举相等判断_python中is和==的区别

    is和==都是对对象进行比较判断作用的,但对对象比较判断的内容并不相同. 想要知道他们的区别,首先要了解一下id()函数,id()函数用于获得python中变量或者对象的唯一标识符,可以理解为内存地址 ...

  2. python中is和 的区别_Python中is和==的区别详解

    Python中有很多运算符,今天我们就来讲讲is和==两种运算符在应用上的本质区别是什么. 在讲is和==这两种运算符区别之前,首先要知道Python中对象包含的三个基本要素,分别是:id(身份标识) ...

  3. python中is和 的区别_Python中is和==的区别

    """ is和 ==的区别 """ a = 'abc' b = 'abc' print("都是字符串-a is b--" ...

  4. python算法和数据结构_Python中的数据结构和算法

    python算法和数据结构 To 至 Leonardo da Vinci 达芬奇(Leonardo da Vinci) 介绍 (Introduction) The purpose of this ar ...

  5. python post与get的区别_python中get和post有什么区别

    更多编程教程请到:菜鸟教程 https://www.piaodoo.com/ 友情链接: 高州阳光论坛https://www.hnthzk.com/ 人人影视http://www.sfkyty.com ...

  6. python中的return和print的区别_python中return和print的区别(详细)

    Huskiesir python最近正在研究.今天,我面临一个问题,那就是,返回和印刷的区别.双方都能输出结果.的区别是什么?闲话少说,看下面的例子.# Code1: def break_words( ...

  7. python中的字典和类的区别_Python中的 字典和字典数据类型

    字典 1.字典是Python的内建数据类型,我们知道序列是以连续的整数为索引,而字典用关键字作为索引.特别的,关键字必须是不可变类型,常为字符串或者数值. #如果元组中只包含字符串和数字,它可以作为关 ...

  8. python包和库的区别_python中模块、包、库的区别和使用

    模块:就是.py文件,里面定义了一些函数和变量,需要的时候就可以导入这些模块. 包:在模块之上的概念,为了方便管理而将文件进行打包.包目录下第一个文件便是 __init__.py,然后是一些模块文件和 ...

  9. python中del和pop的区别_python中的del,remove,pop有什么区别

    python中有3个删除元素的方法:del remove pop 虽然它们都是删除元素,用于删除列表.字符串等里面的元素,但是用法可不完全一样,元组由于是不可变的,所以不能使用哦!那么接下来就来看看它 ...

  10. python中raise和raise e区别_python raise和assert的区别

    python中raise和assert的区别 一.使用raise抛出异常 python可以自动触发异常,raise(内置函数)的定义为显示的抛出异常,用户可以使用raise进行判断,显式的引发异常,r ...

最新文章

  1. ML基石_8_NoiseAndError
  2. 如何为jframe设置于右侧滑轮_如何为电脑设置屏保密码?
  3. 给 Easyui Datagrid 扩展方法
  4. 【Python基础教程】变量的作用域详解
  5. eclipse log4j 日志直接定位到source
  6. 日志库EasyLogging++学习系列(7)—— 记录方式详解
  7. 关于Java中String类的intern()方法
  8. java基础集合简介Map(三)下
  9. java.io.StreamCorruptedException: invalid stream header: 00000000
  10. HTTP状态代码列表
  11. R可能让您惊喜的10件事
  12. oa办公系统文件存取错误_出现文件存取错误解决方法
  13. 2022-2027年中国民办高校行业市场调研及未来发展趋势预测报告
  14. 吉利GKUI车机任意安装第三方APP软件教程,DNS劫持应用商店安装软件
  15. 黑客四种常用来攻击云服务器的手段
  16. 《影响中国大数据产业进程100人》 刘冬冬: 数据如何来支持新的商业战争
  17. 兵法三十六计是哪些?
  18. Revit出图问题:打印机中新建纸张尺寸?批量导出图纸?
  19. 外网访问群晖NAS VMM搭建Openwrt的admin界面
  20. 【学习笔记之程序员】笔记

热门文章

  1. hashmap的负载因子为什么是0.75而不是其他值或者1
  2. spring 之 AOP 理解
  3. 验证堆表(heap table)存储方式
  4. 使用Windows迁移工具迁移2003至2012R2 二、IP迁移
  5. Java入门的程序汇总
  6. 关于Kswapd的理解(一)
  7. PCI设备扫描和资源分配
  8. Wireshark实战分析之UDP协议
  9. datagrid.columns有没有图片图片属性_天龙八部:86四属性神器在线求超越,原来逍遥扇子还能这么洗...
  10. Android中类似Linux下ldd分析可执行文件和动态库对库的依赖