# 一句一句解释执行 >>> a = -6 >>> b = -6 >>> print(a is b, a == b) False True
# test.py 文件内容如下 a = -6 b = -6 print(a is b, a == b) # 运行结果如下 PS F:\CS_Practice\python\2023> python .\test.py True True
# 代码 a = -6 b = -6 print(a is b, a == b) # 运行结果 C:\Users\xtzz\AppData\Local\Programs\Python\Python310\python.exe F:\CS_Practice\python\2023\test.py True True
情况 1 如其他答主所说的 python 有个 [-5, 257) 的小整数内存池,会复用对象所以同个值内存地址相同。a 和 b 的值是 -6,不在范围内所以用 is 比较为 False,也就是 id(a) 不等于 id(b)。
而在 ide 或者直接 python 命令运行整个文件,同样的代码得出的结果却是 a is b
为 True。进一步发现,在 2、3 这样的情况不可变对象(数字、字符串和元组等)相同的值地址就相同。