我得到什么is
和==
做什么以及为什么如果我跑步
a = "ab"
b = "ab"
a == b
我明白了True
。这里的问题是为什么会发生这种情况:
a = "ab"
b = "ab"
a is b # Returns True
所以我做了我的研究,我发现了这个。答案说 Python 解释器使用字符串池。因此,如果它看到两个字符串相同,它会将相同的字符串分配给id
新的字符串以进行优化。
直到这里一切都很好并且得到了回答。我真正的问题是为什么这种池只发生在某些字符串上。这是一个例子:
a = "ab"
b = "ab"
a is b # Returns True, as expected knowing Interpreter uses string pooling
a = "a_b"
b = "a_b"
a is b # Returns True, again, as expected knowing Interpreter uses string pooling
a = "a b"
b = "a b"
a is b # Returns False, why??
a = "a-b"
b = "a-b"
a is b # Returns False, WHY??
因此,对于某些字符,字符串池似乎不起作用。我在这个示例中使用了 Python 2.7.6,所以我认为这将在 Python 3 中得到修复。但是在 Python 3 中尝试了相同的示例后,出现了相同的结果。
问题:为什么没有针对此示例优化字符串池?对 Python 进行优化不是更好吗?
编辑:如果我运行"a b" is "a b"
返回True
。问题是为什么使用变量它会False
为某些字符返回而其他字符True
。