Python中小整数的地址相同,与Java的-128到127缓存机制原理一样吗?
Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:18:55) [MSC v.1900 64 bit (AM
D64)] on win32
Type “help”, “copyright”, “credits” or “license” for more information.
>>> 1==1.0
True
>>> a=1
>>> b=a
>>> c=1
>>> d=1.0
>>>
>>> id(a)
1719534032
>>> id(b)
1719534032
>>> id©
1719534032
>>> id(d)
1679888
Python中小整数的地址相同,与Java的-128到127缓存机制原理一样吗?
Python的整数缓存机制和Java的Integer缓存确实有相似之处,但实现原理和范围不同。
Python在启动时会预先分配一个小整数对象池,范围通常是-5到256(具体实现可能不同)。这些对象在内存中是单例的,所以a=1; b=1时a is b返回True。这主要是为了性能优化,因为小整数使用频繁。
Java的Integer缓存默认范围是-128到127,可以通过JVM参数调整。这是基于Integer.valueOf()方法的实现,而直接new Integer()不会使用缓存。
关键区别:
- Python是语言实现层面的优化,Java是类库层面的实现
- Python范围固定,Java可配置
- Python所有小整数比较
is都相同,Java只有用valueOf()或自动装箱时才可能相同
简单说,都是缓存常用整数来提升性能,但实现方式不同。
厉害厉害 我还没有直接看 cpython 源码的好习惯
还有你这个直接让某行地址高亮的行为,是自己在 url 后面手写参数,还是说 github 上面网页可以点出来这个效果?
Python 有小整数池,提升性能用的。


