Python中is和==的区别有多大,你知道吗?

简介: Python的`is`比较对象身份,`==`比较值。`is`检查对象的ID(内存地址),而`==`关注值是否相等。当对象值相同但位于不同内存位置时,如列表`[3,6,9]`,`x==y`和`x==z`为`True`,但`x is z`为`False`,因它们ID不同。数值和字符串常量重复时,`is`也返回`True`,但其他容器类型如元组、列表、字典和集合,即使值相同,`is`仍返回`False`,因它们在内存中总是不同对象。

image.png

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

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

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

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

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

Exmp1:

>>> a = 'hogwarts'
>>> b = 'hogwarts'
>>> a == b
True

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

Exmp2:

>>> x = y = [3,6,9]
>>> z = [3,6,9]
>>> x == y
True
>>> x == z
True
>>> x is y
True
>>> x is z
False
>>>
>>> print (id(x))
1970475782664
>>> print (id(y))
1970475782664
>>> print (id(z))
1978925995016

前三个例子都是True,这什么最后一个是False呢?x、y和z的值是相同的,所以前两个是True没有问题。至于最后一个为什么是False,看看三个对象的id分别是什么就会明白了, x,y的id相同,z的id却不一样。

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

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

Exmp3:

>>> a = 1 #a和b为数值类型
>>> b = 1
>>> a is b
True
>>> id(a)
14318944
>>> id(b)
14318944
>>> a = 'hogwarts' #a和b为字符串类型
>>> b = 'hogwarts'
>>> a is b
True
>>> id(a)
1516172820848
>>> id(b)
1516172820848
>>> a = (3,6,9) #a和b为元组类型
>>> b = (3,6,9)
>>> a is b
False
>>> id(a)
3047713878888
>>> id(b)
1852930077464
>>> a = [1,2,3] #a和b为list类型
>>> b = [1,2,3]
>>> a is b
False
>>> id(a)
2536812401160
>>> id(b)
2536812401672
>>> 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。

相关文章
|
11天前
|
存储 Python
Python中encode和encoding的区别
Python中encode和encoding的区别
42 0
|
10天前
|
开发工具 Python
Python中return和yield的区别,面试官不讲武德
Python中return和yield的区别,面试官不讲武德
|
11天前
|
开发者 索引 Python
【Python 基础】remove、del和pop有什么区别?
【5月更文挑战第8天】【Python 基础】remove、del和pop有什么区别?
|
11天前
|
存储 Python
【Python 基础】“func”和“ func()”有什么区别?
【5月更文挑战第6天】【Python 基础】“func”和“ func()”有什么区别?
|
11天前
|
Python
【Python 基础】Python中的实例方法、静态方法和类方法有什么区别?
【5月更文挑战第6天】【Python 基础】Python中的实例方法、静态方法和类方法有什么区别?
|
11天前
|
Python
【Python 基础】“is”和“==”有什么区别?
【5月更文挑战第6天】【Python 基础】“is”和“==”有什么区别?
|
11天前
|
Python
【Python 基础】列表(list)和元组(tuple)有什么区别?
【5月更文挑战第6天】【Python 基础】列表(list)和元组(tuple)有什么区别?
|
11天前
|
Python
在Python Web开发过程中:`is`和`==`在Python中的区别是什么?
【4月更文挑战第25天】Python的`is`与`==`用于比较。`is`检查对象是否相同(内存地址一致),而`==`检查值是否相等。例如,`a = [1, 2, 3]`,`b = a`,`c = [1, 2, 3]`,则`a is b`和`a == b`均为True,但`a is c`为False,`a == c`为True,因`a`和`b`引用同一对象,而`a`和`c`值虽等但对象不同。
12 1
|
11天前
|
XML 存储 数据处理
tsv、csv、xls等文件类型区别及处理(python版)
tsv、csv、xls等文件类型区别及处理(python版)
|
11天前
|
Python
Python中continue和break的区别
Python的`continue`和`break`关键字用于控制循环流程。`continue`跳过当前迭代的剩余代码,进入下一次循环,常用于忽略某些特定迭代。而`break`则终止当前循环,直接退出循环体。两者都只能在循环中使用,选择使用哪个取决于具体需求,以实现更简洁高效的代码。了解它们的区别有助于更好地控制循环流程。
19 0