整數對象池

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

相關文章
相關標籤/搜索