|

理解 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

在此例中,變數 ab 都指向數值 256,由於該數值位於小整數緩衝範圍內,Python 預設讓兩者指向同一內存位置,因此 a is b 的比較結果為 True

示意圖

a -----> 256 <----- b

範例:超出小整數範圍的內存位置差異

當變數指向的值超出小整數緩衝範圍時(例如大於 256),Python 則會為每個變數創建新的物件,因此它們的內存位置不同,使用 is 比較時會返回 False

a = 257
b = 257
print(a is b)  # 返回 False

在這個範例中,ab 都被賦值為 257,但由於 257 不在小整數緩衝範圍內,Python 會為 ab 創建不同的內存位置,因此 a is b 的比較結果為 False

示意圖

a -----> 257

b -----> 257  # 兩者指向不同內存位置

使用小整數緩衝機制的注意事項

  1. 範圍限定:僅 -5 至 256 的整數會啟用小整數緩衝,超出此範圍的整數則不受此優化機制影響。
  2. is== 的區別is 比較的是兩個變數的內存位置,而 == 比較的是兩個變數的值。

    若只需比較數值相等,應使用 ==,而非 is

結語

Python 的小整數緩衝機制,有效地優化了小範圍整數的內存使用,減少了不必要的內存分配,從而提高程式效率。

在實際應用中,了解此機制有助於避免 is 操作符的誤用並撰寫更高效的程式。

Similar Posts