目錄
三、小整數池
x = 10
變數存放在記憶體中這句話太寬泛了,我們把它具體化。
對於電腦記憶體這個大記憶體,每定義乙個變數就會在這個大記憶體中開闢乙個小空間,小空間內存放變數值10,然後記憶體給這個小空間乙個變數名x(門牌號),x指向10。
對於p1.py,如果我們再加上一段**x = 11
,大記憶體會開闢另乙個小空間儲存變數值11,把變數值繫結另乙個門牌號x,但是由於之前有x,所以大記憶體會解除x與10的連線,讓x與11連線。這個時候10由於沒有了門牌號,所以成為了python眼中的垃圾,python就會處理這個垃圾,釋放10的記憶體占用,這就是python的垃圾**機制。而其他語言需要手動把10的記憶體占用釋放掉。
從上述的解釋我們可以知道只要某個變數值繫結著門牌號,就不是垃圾,反之變數值沒有繫結著門牌號,這個變數值就是垃圾,python就會自動清理這個垃圾。這裡我們對於這個門牌號給定乙個專業的解釋,在python中這個門牌號被稱作引用計數。
x = 10 # 10引用計數加1為1
y = x # 10引用計數加1為2
x = 11 # 10引用計數減1為1;11引用計數加1為1
del y # 10引用計數減1為0,觸發python垃圾**機制,python清理10的記憶體占用
上述**就是乙個引用計數加減的過程。
為了避免因建立相同的值而重複申請記憶體空間所帶來的效率問題, python直譯器會在啟動時建立出小整數池,範圍是[-5,256],該範圍內的小整數物件是全域性直譯器範圍內被重複使用,永遠不會被垃圾**機制**。
在pycharm中執行python程式時,pycharm出於對效能的考慮,會擴大小整數池的範圍,其他的字串等不可變型別也都包含在內一便採用相同的方式處理了,我們只需要記住這是一種優化機制,至於範圍到底多大,無需細究。
009python中的集合
一 集合的定義及特點集合是容器型資料型別,將作為容器的標誌,元素之間用逗號隔開 集合是可變的 支援增刪 集合是無序的 集合有自動去重的功能 集合中的元素的要求 不可變,唯一 注意 空集合的表示 set1 set 只有乙個元素的集合的表示 set1 二 集合的查增刪1 查集合沒有辦法直接獲取單個元素,...
Python變數記憶體管理
思考 當變數值命名以及生成的時候,會在 儲存著呢 x 10當我們在p1.py中定義乙個變數x 10,那麼計算機把這個變數值10存放在 呢了?我們回顧計算機的三大核心元件為 cpu 記憶體和硬碟。一定不是cpu,那是存放在記憶體還是硬碟中了呢?我們再回顧變數執行的三個過程,如果我們沒有使用python...
Python變數記憶體管理
目錄變數 描述世間萬物的狀態 在申請變數的時候,會在記憶體中申請記憶體空間,變數值是存在於記憶體中的。乙個變數,記憶體就開闢乙個記憶體空間儲存這個變數。比如 x 10當我們在p1.py中定義乙個變數x 10,那麼計算機把這個變數值10存放在 呢了?我們回顧計算機的三大核心元件為 cpu 記憶體和硬碟...