【发布时间】:2014-10-10 09:16:43
【问题描述】:
s="wall"
d="WALL".lower()
s is d 返回False。
s 和 d 具有相同的字符串。但为什么它返回 False?
【问题讨论】:
-
您从哪里得知
is?你应该非常非常少地使用它。 -
@Eevee 我是在搜索字符串操作时遇到的。
标签: python
s="wall"
d="WALL".lower()
s is d 返回False。
s 和 d 具有相同的字符串。但为什么它返回 False?
【问题讨论】:
is?你应该非常非常少地使用它。
标签: python
通过使用is,您正在比较他们的身份,如果您尝试比较他们的值的print s == d,您将得到正确的结果。
查看此帖子了解更多详情:String comparison in Python: is vs. ==
【讨论】:
使用== 比较对象是否相等。使用is 检查两个变量是否引用完全相同的对象。这里s 和d 指的是两个具有相同内容的不同字符串对象,因此== 是正确使用的运算符。
【讨论】:
== 测试是否相等。 a == b 测试a 和b 是否具有相同的值。
is 测试身份——也就是说,a is b 测试a 和b 实际上是否是同一个对象。除了测试is None,不要使用它。
【讨论】:
您似乎误解了is 运算符。如果所讨论的两个变量位于相同的内存位置,则此运算符返回 true。在这种情况下,虽然您有两个变量都存储值“wall”,但它们仍然是不同的,因为每个变量都有自己的单词副本。
为了正确检查字符串是否相等,您应该使用== 运算符,即值相等检查。
【讨论】:
"is" 关键字比较对象 ID,而不仅仅是值是否相等。 它与许多其他语言中的 '===' 运算符不同。 'is' 等价于:
id(s) == id(d)
还有一些更有趣的案例。例如(在 CPython 中):`
a = 5
b = 5
a is b # equals to True
但是:
c = 1200
d = 1200
c is d # equals to False
结论是:不要使用'is'来比较值,因为它会导致混淆。
【讨论】: