python中 is和== 以及 is not和!= 的区别
python 中的运算符 is(is not) 和 ==(!=)
在做条件判断的时候,python中 is
和 ==
都可以用来判别变量引用对象是否相等,而 is not
和 !=
都可以用来判别变量引用对象是否不等,但在实际应用中对于不同类型的变量,实际上这两者的效果完全不同。
究其根本,is
和 is not
在判断时比较的是两个变量引用对象的内存地址,而 ==
和 !=
则比较的是引用对象的值。
python 中提供了 id()
函数来获取对象的内存地址,可用来验证。
比如,当参数为 int 时,其内存地址相同,则以上两种判别方法等效。
>>> a = 1
>>> id(a)
4510289072
>>> b = 1
>>> id(b)
4510289072
>>> if a == b:
... print(True)
... else:
... print(False)
...
True
>>> if a is b:
... print(True)
... else:
... print(False)
...
True
同理,也可以验证 str、list、dict、tuple、set 等类型。
两种比较运算符功能差异小结
经验证:
- int、大部分str 以及 正值float 类型的变量其引用对象的内存地址相同,即上述两种判断方法等效。
- list、dict、tuple、set、负值float 以及 部分str 类型的变量其引用对象的内存地址不同,故若要判断变量相等或不等,此时应使用
==
或!=
。 - 部分内存地址不同的 str 包括三种括号,即
()
、[]
、{}
,恰好对应 tulpe、list、set三种类型。(其他不同的str类型字符串暂未发现)