在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]
另一方面,运行以下程序时:
#!/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)
输出是:
True True 3.5.2 (default, Nov 17 2016, 17:05:23) [GCC 5.4.0 20160609]
为什么a is b
在上述两种情况下会有不同的结果?
我知道这个答案(当然还有的差异之间==
和is
运营商!这是个问题点!),但不a
与b
同一对象也是在第一种情况?(interpeter?)因为它们指向相同的(不可变的)字符串?
这是由字符串实习引起的.见这个问题的另一个例子.
在您的示例中,CPython实现模块中的字符串常量,但不在REPL中.