2

5.4.6Python下is同一性运算符

Posted by 撒得一地 on 2016年3月14日 in python教程

is这个运算符比较有趣,它看起来和"=="一样,事实上却不同,比如:

>>> x = y = [1,2,3]
>>> z = [1,2,3]
>>> x == y
True
>>> x == z
True
>>> x is y
True
>>> x is z
False

从上面的例子可以看到,x和z相等却不等同,为什么?因为is运算符是判定同一性而不是相等性的。变量x和y都绑定到同一个列表上,而变量z被绑定在另外一个具有相同数值和顺序的列表上。它们的值可能相等,但是却不是同一个对象。再看个实例:

>>> x = [1,2,3]
>>> y = [2,4]
>>> x is not y
True
>>> del x[2]
>>> y[1] = 1
>>> y.reverse()
>>> y
[1, 2]
>>> x
[1, 2]
>>> x == y
True
>>> x is y
False

本例中,首先包括两个不同的列表x和y。可以看到x not y与(x is y相反),这个已经知道了。之后我改动了y列表,尽管它们的值相等了,但是还是两个不同的列表。

显然,两个列表值相等但是不等同。

总结一下:使用==运算符来判定两个对象是否相等,使用is判定两者是否等同(同一个对象)。

避免将is运算符用于比较类似数值和字符串这类不可变值。由于Python内部操作这些对象的方式的原因,使用运算符的结果是不可预测的。

上一篇:

下一篇:

相关推荐

2 Comments

Comments are closed. Would you like to contact the author directly?
网站地图|XML地图

Copyright © 2015-2024 技术拉近你我! All rights reserved.
闽ICP备15015576号-1 版权所有©psz.