Python 的内建對象存放在源代碼的 Objects intobject.c
目錄下。
用于整數對象
在 Python 中,整數分為
小整數對象
和 大整數對象
小整數對象
由于數值較小的整數對象在記憶體中會很頻繁地使用,如果每次都向記憶體申請空間、請求釋放,會嚴重影響 Python 的性能。好在 整數對象 屬于不可變對象,可以被共享而不會被修改導緻問題,是以為 小整數對象 劃定一個範圍,即小整數對象池,在Python運作時初始化并建立範圍内的所有整數,這個範圍内的 整數對象是被共享的,即一次建立,多次共享引用。
那麼這個範圍是多少呢?從源檔案中可以看到,而且,使用者可以自行調整,隻是每次都要在源檔案中修改,而後進行編譯、安裝。
小整數池的範圍:
#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)
https://github.com/python/cpython/blob/2.7/Objects/intobject.c#L67-L80