对象比较用"=="还是"is"?

2019年8月18日 / 19次阅读 / Last Modified 2019年9月3日
语法

在Python的条件语句中,我们常常使用“==”和“is”这两种不同的操作符来对两边对象进行比较,你可仔细分析过这两种操作符的异同?

操作符“==”比较两个对象的值(内容)是否相同,而操作符“is”比较两个对象是否一样!

>>> a1 = [1,2,3,4,5]
>>> a2 = [1,2,3,4,5]
>>> a1 == a2
True
>>> a2 != a2
False
>>> a1 is a2
False
>>> a1 is not a2
True
>>> id(a1)
140422388016200
>>> id(a2)
140422388017672

通过id函数可以看出,a1和a2是两个位于不同内存地址的变量,因此 is not 为 True。而a1和a2的值相同,因此 == 为True。

操作符“==”只是比较两个对象的值,使用这个操作符不能判断两个对象是否指向相同!

>>> a3 = a1
>>> a1 == a2
True
>>> a1 is a2
False
>>> a1 is a3
True
>>> id(a3)
140422388016200
>>> id(a1)
140422388016200

a3指向a1,a1与a2值相同,a1与a3指向相同对象。

操作符“is”判断两个对象是否一样,如果一样,其值也必然相同。同时,“is”这个操作符还兼顾了增加Python语言可读性的使命!

>>> def dosth(num):
...     if num <= 0: return False
...     if num > 0: return True
...
>>> if dosth(0) is True: print('WTF...')
...
>>> if dosth(1) is True: print('Thank God!')
...
Thank God!
>>> if dosth(1) is not True: print('WTF...')
...
>>> if dosth(0) is not True: print('Told you!')
...
Told you!

总结:当你指向比较两个对象的值(内容),使用“==”操作符;当你想判断两个对象是否指向相同地址(相同对象)时,使用“is”操作符;能使用“is”的时候,尽量多用,它会让你的代码阅读起来更舒服。

-- EOF --

本文链接:https://www.pynote.net/archives/872

留言区

《对象比较用"=="还是"is"?》有2条留言

电子邮件地址不会被公开。 必填项已用*标注

  • 麦新杰

    dosth函数返回的是True和False,所以可以使用is True和is False。 [回复]

  • 麦新杰

    Python中一切都是对象,正如Linux中一切都是文件。用is做对象比较,本质上是在比较这两个对象的地址(id函数的返回)。 [回复]


前一篇:
后一篇:

More

麦新杰的Python笔记

Ctrl+D 收藏本页


©Copyright 麦新杰 Since 2019 Python笔记

go to top