是文件中的运算符python

时间:2015-02-16 07:12:16

标签: python comparison

刚遇到这个问题,它让我感到困惑!我的代码只想比较song[-3:] is "mp3",如果我没有使用is,那就会通过,但是通过我对理解中的所有耐心,我发现了一种奇特的行为。我知道is据说测试看两个东西是同一个实例还是其他东西,但是当值相同时,为什么,为什么,它会失败?当我使用is运算符测试一行(另一行)上的两个字符串的ID时,==运算符:

>>> id("String"[-3:]), id("String"[-3:])
(4347723880, 4347723880)
>>> id("String"[-3:])
4347241952
>>> "String"[-3:] is "String"[-3:]
False
>>> "String"[-3:] == "String"[-3:]
True

所以我想我的问题是,当我使用is时,或者在单独的一行上测试时,为什么id会改变,而不是在同一行上?这是一个奇怪的例外吗,或者这是我的一些疏忽?

3 个答案:

答案 0 :(得分:3)

is测试它们是否是相同的字符串,而不仅仅是相同的字符串。由于字符串是不可变的,因此如果您要求具有相同值的字符串,Python可以选择重用旧字符串 - 您遇到的情况是它确实选择执行此操作。正如你所见,它并不总是如此。 时的规则是否得到保证。要在所有情况下获得正确的结果,请随时使用str1 == str2"这些字符串是否包含所有相同的字母"。

答案 1 :(得分:0)

这是因为当你这样做时:

"String"[-3:] is "String"[-3:]

python创建两个具有不同id的不同对象。

答案 2 :(得分:0)

当你调用"String"[-3:]时,python会给你一个字符串对象。如果有一个相同的str。两个str应该是一样的。但是,如果你没有将"String"[-3:]分配给变量。"String"[-3:]将会“消失”。我测试过你是否使用a="String"[-3:]。然后"String"[-3:]的id不再改变