2
5.4.6Python下is同一性运算符
Posted by 撒得一地 on 2016年3月14日 in python教程
上一篇: 5.4.5Python下相等运算符
下一篇: 5.4.7Python下字符串和序列比较
下一篇: 5.4.7Python下字符串和序列比较
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内部操作这些对象的方式的原因,使用运算符的结果是不可预测的。
上一篇: 5.4.5Python下相等运算符
下一篇: 5.4.7Python下字符串和序列比较
下一篇: 5.4.7Python下字符串和序列比较
2 Comments
听说Python比PHP实用性还较强。。。
表示不懂