如上,为什么有的地址相同,有的不同,原因是什么,有没有一个阈值
小整数从-5到256 id相同指向同一位置(这个有可能跟系统或其他的设置有关,不过默认应该是这样的)
可以用is来判断两个变量是否id相同
可以用==来判断值是否相同如:
In [1]: a = 256
In [2]: b = 256
In [3]: a is b
Out[3]: True
In [4]: a == b
Out[4]: True
In [5]: c = 257
In [6]: d = 257
In [7]: c is d
Out[7]: False
In [26]: c == d
Out[26]: True
# 负数
In [20]: a = -5
In [21]: b = -5
In [22]: a is b
Out[22]: True
In [23]: a = -6
In [24]: b = -6
In [25]: a is b
Out[25]: False
# 变量赋值
In [27]: c = 257
In [28]: d = c
In [29]: c is d
Out[29]: True
# 字符串
In [30]: a = 'str'
In [31]: b = 'str'
In [32]: a is b
Out[32]: True
# 带空格的字符串
In [36]: a = 'hello world'
In [37]: b = 'hello world'
In [38]: a is b
Out[38]: False
这个不一定,从解释器的角度看,两者都可以,取决于这个变量是否经常修改。如果经常修改,那么分别存储更快。如果不经常修改,那么共享存储节约内存。
不一定,两者的调用频率不同的话,分别存储的效率更高,但两种存储方式都存在
跟Java一样, 为提高内存利用效率, Python 解释器在运行程序时会建立一个共享对象池, 将常用的小整数(不大于256)都放在这个池子里.
创建不大于256的整数对象时, 直接从池子里面取, 而不是分配新的内存空间创建新的对象.
所以对于不大于256的整数, 相同值的整数对象其内存地址都一样.