python中 值一样变量名不同那么内存中的地址相同吗

图片说明
如上,为什么有的地址相同,有的不同,原因是什么,有没有一个阈值

小整数从-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的整数, 相同值的整数对象其内存地址都一样.