代码"python" is "python"
返回True
。但为什么(1,2,3) is (1,2,3)
会返回False
?即使两者都是不可变对象,is
运算符的评估也不同。为什么呢?
答案 0 :(得分:1)
运算符 is 和不是测试对象标识:当且仅当x和y是同一个对象时,x是y才为真。 x不是y产生反向真值。
你可以将身份视为对象在内存中的地址。所以对于具有相同索引的2元组,我们有不同的地址! ,在这种情况下,根据您的解释器和解释器上面的内容,相等的字符串指向一个内存地址
为了更好地理解,请参阅下面的演示:
>>> a=(0,1)
>>> b=a
>>> a is b
True
>>> c=(0,1)
>>> a is c
False
答案 1 :(得分:0)
。解释器可以使用实际的不可变对象,但不能保证。
答案 2 :(得分:0)
你的第一个例子是True
的唯一原因是当从源代码加载时字符串文字被实现(我认为这仅适用于单个文件中的字符串)。
在除字符串文字之外的几乎所有情况下,在不同时间创建的对象将具有不同的ID。
答案 3 :(得分:0)
如果有任何疑问,X is Y
会检查X
和Y
refer to the same object。它不检查两个对象是否相等。
现在回答你的问题:
对于给定的文字A is A
True
是否会返回False
或A
,您通常不会有任何期望。
我们非常清楚CPython在内部是如何工作的,所以we can explain为什么每个特定情况的行为都是这样的。也就是说,除了在一些真正特殊情况下,最好将其视为实施细节。在不同的Python解释器中,或者在不同版本的CPython中,它的行为可能会有所不同。
当然,这并不意味着is
没用。在这种情况下,就是这样。