问一个python的问题

img


请问为什么是true?3和5在python中不是同一个地址吗?python中[-5,256]范围内的地址不都一样吗?

这句话简单翻译过来就是 你说3 不是 5
然后机器返回来给你一个true 你说对了
第二个 3和5在python中不是同一个地址吗?
地址这里你说的应该是程序运行后在内存建立的虚拟内存地址,这里的地址其实是唯一的,但是对应引用的符号也就是说的变量名是可以指向同一个地址的,但是3和5都是常量,不能做变量名,所以其实他们并不是同一个地址
python中[-5,256]范围内的地址不都一样吗?
这些数字在定义为小整数池,python对这些数值已经提前创建好了内存空间,即使多次重新定义也不会在重新开辟新的空间,并不是地址相同

img

is not 是比较值,不是比地址。 谢谢地址用 id() ,经测试结论是对的![-5,256]范围内的地址都一样

>>> 3 is 3
True
>>> 3 is not 5
True
>>> 3 == 3
True
>>> 3 != 5
True
>>> a = b = 257 #赋值声明时,地址相同
>>> id(a),id(b), id(a)==id(b)  
(50193168, 50193168, True)
>>> a += 1; b+=1
>>> id(a),id(b), id(a)==id(b)
(50193040, 50193200, False)
>>> a -= 1; b-=1
>>> id(a),id(b), id(a)==id(b), a, b
(50193136, 50193040, False, 257, 257)
>>> a -= 1; b-=1
>>> id(a),id(b), id(a)==id(b), a, b
(8791312311952, 8791312311952, True, 256, 256) #发生计算时,值<=256地址就相同了

>>> a = 1000; b = 1000
>>> id(a),id(b), id(a)==id(b)
(50193200, 50193200, True)
>>> a -= 1005; b-=1005
>>> id(a),id(b), id(a)==id(b)
(8791312303600, 8791312303600, True)
>>> a -= 1; b-=1
>>> id(a),id(b), id(a)==id(b)
(50193168, 50193136, False)