Python在交互模式下不是实习字符串?

pka*_*mol 9 python string equality python-3.5

在Python交互式会话中:

In [1]: a = "my string"

In [2]: b = "my string"

In [3]: a == b
Out[3]: True

In [4]: a is b
Out[4]: False

In [5]: import sys

In [6]: print(sys.version)
3.5.2 (default, Nov 17 2016, 17:05:23) 
[GCC 5.4.0 20160609]
Run Code Online (Sandbox Code Playgroud)

另一方面,运行以下程序时:

#!/usr/bin/env python

import sys


def test():
    a = "my string"
    b = "my string"
    print(a == b)
    print(a is b)


if __name__ == "__main__":
    test()
    print(sys.version)
Run Code Online (Sandbox Code Playgroud)

输出是:

True
True
3.5.2 (default, Nov 17 2016, 17:05:23) 
[GCC 5.4.0 20160609]
Run Code Online (Sandbox Code Playgroud)

为什么a is b在上述两种情况下会有不同的结果?

我知道这个答案(当然还有的差异之间==is运营商!这是个问题点!),但不ab同一对象也是在第一种情况?(interpeter?)因为它们指向相同的(不可变的)字符串?

小智 8

这是由字符串实习引起的.见这个问题的另一个例子.

在您的示例中,CPython实现模块中的字符串常量,但不在REPL中.

  • 有关详细信息,请参阅[this](http://stackoverflow.com/a/25267946/2076832)答案. (2认同)
  • 更正。这不是字符串实习的过错。这与不断折叠有关。见[这里](https://paste.pound-python.org/show/1lMKJxdj7mgR3doK98XS/) (2认同)