Jython:'is' 关键字的不同行为

Jython: different behaviour with 'is' keyword

我正在 Python 中编写一些需要与某些 Java 库一起使用的脚本,因此我使用 Jython。我注意到在编译后,变量与 is 的比较产生与 Python shell.

不同的结果

我知道 is== 在 Python 中有不同的用途,但是在 shell 中编译匹配行为后的行为不应该吗?

这是我在脚本中编写的简化函数:

def test(myString='AAA'):
    print myString is 'AAA'

test()

现在,当我用 Python 运行 时,结果是 True,但是用 Jython 编译后,结果是 False。

之后,我将 is 关键字更改为 ==,结果匹配。

我很好奇为什么结果不同。我假设在编译后,Java 检查引用而不是值,但 Python 也应该如此,对吧?

Python中的is关键字用于测试两个值是否指向同一个对象。在您的示例中,当且仅当字符串为 interned(参见 https://en.wikipedia.org/wiki/String_interning)时,它才会 return True。这是高度特定于实现的。

要按字典顺序比较字符串,您应该使用 ==