009 Python變數記憶體管理

2022-04-11 19:33:21 字數 940 閱讀 8428

目錄

三、小整數池

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 記憶體和硬碟...