我最近在生产系统中发现了一个潜在的错误,其中使用身份运算符比较了两个字符串,例如:
if val[2] is not 's':
我想这无论如何都会经常工作,因为据我所知,CPython 将短的不可变字符串存储在同一位置。我已将其替换为!=
,但我需要确认之前通过此代码的数据是正确的,所以我想知道这是否总是有效,或者它是否只是有时有效。
据我所知,Python版本一直是2.6.6,上面的代码似乎是唯一is
使用操作符的地方。
有谁知道这条线是否总是按照程序员的意图工作?
编辑: 因为这无疑对未来的读者非常具体且无益,所以我会问一个不同的问题:
我应该在哪里寻找绝对确定的 Python 实现的行为?CPython 源代码中的优化是否易于理解?有小费吗?