有人能给我解释一下,为什么python3.7中的a is b
输出与以前的版本不同?例如,在以下情况下:
>>> a, b = 257, 257
>>> a is b
True # Python < 3.7
False # Python 3.7
>>> a = 257; b = 257;
>>> a is b
True # Python < 3.7
True # Python 3.7
这种行为也包括字符串:
>>> a, b = "wtf!", "wtf!"
>>> a is b
True # Python < 3.7
False # Python >= 3.7
>>> 'a' * 20 is 'aaaaaaaaaaaaaaaaaaaa'
True # in all Python versions
>>> 'a' * 21 is 'aaaaaaaaaaaaaaaaaaaaa'
False # Python < 3.7
True # Python >= 3.7
Python实现可以自由地共享或不共享不可变的对象,这是由它自己决定的,因为我们可能并不清楚。我不知道为什么Python3.7的行为与Python3.6不同。可能是窥视孔优化器的改变,或者是不可变值的插入。你知道吗
行为改变并不重要。真正的程序不会进行这种测试,正是因为它们是关于内部实现细节的。你知道吗
相关问题 更多 >
编程相关推荐