此问题在此处已有答案:
Python string interning(2个答案)
14小时前关门了。
有人能解释一下为什么我会得到下面的输出吗?(我知道这段代码有SyntaxWarning。
>>> a = 'book'
>>> a is 'book'
True
>>> a = 'two book'
>>> a is 'two book'
False
我期望两个代码段的结果相同。
此问题在此处已有答案:
Python string interning(2个答案)
14小时前关门了。
有人能解释一下为什么我会得到下面的输出吗?(我知道这段代码有SyntaxWarning。
>>> a = 'book'
>>> a is 'book'
True
>>> a = 'two book'
>>> a is 'two book'
False
我期望两个代码段的结果相同。
1条答案
按热度按时间but5z9lq1#
当在Python中用“is”比较任意两个对象时,实际上是检查这两个对象的存储分配。
当创建一个字符串时,python试图通过对两个字符串使用相同的分配来优化存储,但是这种行为并不总是一致的,因为对于其他字符串可能会有所不同。
我注意到,当使用空格(““)作为字符串的一部分时,这种行为发生了变化。
无论如何,你应该用“==”而不是“is”来比较对象。这样,比较将使用对象类中的“eq”方法。或者,如果你愿意,你可以自己实现这个方法(使用继承和重写)