python 值相同变量名不同,内存地址相同吗?

时间:2022-01-15 10:48:17
python 值相同变量名不同,内存地址相同吗?
如图,为什么有的相同,有的不同,原因是什么,有没有阈值

6 个解决方案

#1


常数超过256,id就不一样了

#2



Python 解释器对于数字有个小数字缓存池:-5~257, 原因是:地址数据最少是32位的,现在都是64位了,如果单独为一个小整数创建一个对象,10个地方用到这个小整数,那么就会在内存中创建10个存储的内存地址的空间,地址占用的数据长度比数据本身还大这样非常不划算。而有这个缓存池,python解释器内部就会共享这个小整数对象,不去开内存空间。从而减少内存的使用率,降低浪费。)

字符串也有内存池,给了2k空间,python内部有算法,按照内部权重排列,如果级别高了就把你放入内存。列表、字典都有。

#3


小整数对象池:python在执行的时候,为了节约空间,帮我们创建好了小整数对象池,[-5~256],都是固定的地址,不管你用不用,都会存在。
比如,a=5,b=5,id(a)和id(b)的地址都是小整数池中固定已经存在的地址,所以相等
但如果,a=1000,b=1000,这时会给a一个地址,也会给b一个地址,但他们都不相等。
希望可以帮助你~

#4


楼上说的比较清楚了,python会提前分配一些常用的值来提高效率,具体可以看《Python 源码剖析》

里面讲的非常清楚

#5


在python3.0中,python中缓存了0到255的数字,所以在这范围内的字面值的变量的地址都一样

#6


建议去看看python的缓存机制

#1


常数超过256,id就不一样了

#2



Python 解释器对于数字有个小数字缓存池:-5~257, 原因是:地址数据最少是32位的,现在都是64位了,如果单独为一个小整数创建一个对象,10个地方用到这个小整数,那么就会在内存中创建10个存储的内存地址的空间,地址占用的数据长度比数据本身还大这样非常不划算。而有这个缓存池,python解释器内部就会共享这个小整数对象,不去开内存空间。从而减少内存的使用率,降低浪费。)

字符串也有内存池,给了2k空间,python内部有算法,按照内部权重排列,如果级别高了就把你放入内存。列表、字典都有。

#3


小整数对象池:python在执行的时候,为了节约空间,帮我们创建好了小整数对象池,[-5~256],都是固定的地址,不管你用不用,都会存在。
比如,a=5,b=5,id(a)和id(b)的地址都是小整数池中固定已经存在的地址,所以相等
但如果,a=1000,b=1000,这时会给a一个地址,也会给b一个地址,但他们都不相等。
希望可以帮助你~

#4


楼上说的比较清楚了,python会提前分配一些常用的值来提高效率,具体可以看《Python 源码剖析》

里面讲的非常清楚

#5


在python3.0中,python中缓存了0到255的数字,所以在这范围内的字面值的变量的地址都一样

#6


建议去看看python的缓存机制