整数对象池

Python 的内建对象存放在源代码的Objects目录下。
intobject.c用于整数对象python

在 Python 中,整数分为小整数对象大整数对象git

 

小整数对象

因为数值较小的整数对象在内存中会很频繁地使用,若是每次都向内存申请空间、请求释放,会严重影响 Python 的性能。好在 整数对象 属于不可变对象,能够被共享而不会被修改致使问题,因此为 小整数对象 划定一个范围,即小整数对象池,在Python运行时初始化并建立范围内的全部整数,这个范围内的 整数对象是被共享的,即一次建立,屡次共享引用。github

那么这个范围是多少呢?从源文件中能够看到,并且,用户能够自行调整,只是每次都要在源文件中修改,然后进行编译、安装。c#

小整数池的范围:性能

#ifndef NSMALLPOSINTS #define NSMALLPOSINTS 257 #endif #ifndef NSMALLNEGINTS #define NSMALLNEGINTS 5 #endif #if NSMALLNEGINTS + NSMALLPOSINTS > 0 /* References to small integers are saved in this array so that they can be shared. The integers that are saved are those in the range -NSMALLNEGINTS (inclusive) to NSMALLPOSINTS (not inclusive). */ static PyIntObject *small_ints[NSMALLNEGINTS + NSMALLPOSINTS];

从源代码能够看出
define NSMALLPOSINTS 257,范围的右边界
define NSMALLNEGINTS 5,范围的左边界
-NSMALLNEGINTS (inclusive) to NSMALLPOSINTS (not inclusive),[-5, 257)this

https://github.com/python/cpython/blob/2.7/Objects/intobject.c#L67-L80spa

相关文章
相关标签/搜索