理解 Python 的小整數緩衝機制(small integer caching)
更新日期: 2024 年 11 月 16 日
Python 中有一項優化技術稱為「小整數緩衝機制」(small integer caching),它專門針對範圍內的整數進行內存緩衝。
這項機制主要作用在範圍 -5 至 256 之間的整數,使得這些數字在程式運行中,始終指向相同的內存位置,達到提高執行效率的目的。
本文將解釋這一原理並演示其應用效果。
小整數緩衝機制的原理
小整數緩衝機制是 Python 對常用小整數進行內存優化的一種手段。
當 Python 啟動時,它會在內存中預先儲存 -5 到 256 的整數,並在程式運行過程中重複使用這些緩衝的整數物件。
這樣做的目的,是減少頻繁創建和銷毀小整數物件的開銷,從而提升運行速度。
為何僅限於 -5 至 256 的範圍?
此範圍的選擇主要是出於實際運行效率的考量。
在多數應用場景中,小整數(例如常見的索引值或簡單計算結果)頻繁出現,因此 Python 將這一範圍的整數預先緩衝,以便在程式執行時快速引用。
小整數緩衝機制的應用範例
範例:同一內存位置的變數比較
在小整數範圍內(-5 至 256),兩個變數若被賦相同的數值,它們會指向相同的內存位置,因此使用 is
比較操作時會返回 True
。
a = 256
b = 256
print(a is b) # 返回 True
在此例中,變數 a
和 b
都指向數值 256,由於該數值位於小整數緩衝範圍內,Python 預設讓兩者指向同一內存位置,因此 a is b
的比較結果為 True
。
示意圖
a -----> 256 <----- b
範例:超出小整數範圍的內存位置差異
當變數指向的值超出小整數緩衝範圍時(例如大於 256),Python 則會為每個變數創建新的物件,因此它們的內存位置不同,使用 is
比較時會返回 False
。
a = 257
b = 257
print(a is b) # 返回 False
在這個範例中,a
和 b
都被賦值為 257,但由於 257 不在小整數緩衝範圍內,Python 會為 a
和 b
創建不同的內存位置,因此 a is b
的比較結果為 False
。
示意圖
a -----> 257
b -----> 257 # 兩者指向不同內存位置
使用小整數緩衝機制的注意事項
- 範圍限定:僅 -5 至 256 的整數會啟用小整數緩衝,超出此範圍的整數則不受此優化機制影響。
is
與==
的區別:is
比較的是兩個變數的內存位置,而==
比較的是兩個變數的值。
若只需比較數值相等,應使用==
,而非is
。
結語
Python 的小整數緩衝機制,有效地優化了小範圍整數的內存使用,減少了不必要的內存分配,從而提高程式效率。
在實際應用中,了解此機制有助於避免 is
操作符的誤用並撰寫更高效的程式。