是文件中的运算符 python

is operator python in file

刚遇到这个问题,百思不得其解!我的代码只是想比较 song[-3:] is "mp3" 如果我不使用 is,它会通过,但是通过我对我无法理解的事情的所有耐心,我发现了一个奇怪的行为。我了解到 is 应该测试两个事物是否是同一个实例或其他什么,但是当值相同时,为什么,哦,为什么,它会失败?当我在一行上测试两个字符串的 id 时,另一行使用 is 运算符,然后是 == 运算符:

>>> 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 会改变,但在同一行上却不会?这是什么奇怪的异常,还是我的疏忽?

发生这种情况是因为当您这样做时:

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

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

is 测试它们是否是 same 字符串,而不仅仅是相同的字符串。由于字符串是不可变的,如果您要求一个具有相同值的字符串,Python 可以选择重用旧字符串 - 您会遇到它确实选择这样做的某些情况。如您所见,并非总是如此。无法保证 的规则。要在所有情况下都获得正确的结果,请在您表示 "do these strings have all the same letters".

时使用 str1 == str2

当你调用"String"[-3:]时,python给你一个字符串对象。如果有相同的 str。两个 str 应该相同。但是,如果您不将 "String"[-3:] 分配给 varible.The,"String"[-3:] 将是 "disapeared"。我测试了你是否使用a="String"[-3:]。那么"String"[-3:]的id就不会再变了