Python變量內存管理

Python變量內存管理

1、變量存哪裏

變量:描述世間萬物的狀態性能

在申請變量的時候,會在內存中申請內存空間,變量值是存在於內存中的。優化

一個變量,內存就開闢一個內存空間存儲這個變量。3d

好比:code

x = 10

當咱們在p1.py中定義一個變量x = 10,那麼計算機把這個變量值10存放在哪裏呢了?咱們回顧計算機的三大核心組件爲:CPU、內存和硬盤。必定不是CPU,那是存放在內存仍是硬盤中了呢?咱們再回顧變量運行的三個過程,若是咱們沒有使用python解釋器運行p1.py這個文件,那麼x=10很明顯只是很普通的四個字符x、=、一、0。而只有Python解釋器運行了這個文件,那字符進入了內存,纔會有變量這個概念。也就是說變量是存放在內存當中的。對象

變量存放在內存中這句話太寬泛了,咱們把它具體化。如今想象咱們在學校(電腦內存)裏上課,學校每開一個班,學校都會開闢一個教室給這個班級上課用(存放變量值10),而班級的門牌號則是(變量名x)。也就是說,對於電腦內存這個大內存,每定義一個變量就會在這個大內存中開闢一個小空間,小空間內存放變量值10,而後內存給這個小空間一個變量名x(門牌號),x指向10。blog

2、python垃圾回收機制

定義一個變量,內存就開闢一個內存空間存儲這個變量。在變量被打印輸出而且後面無引用的時候,會釋放變量的內存空間。內存

對於p1.py,若是咱們再加上一段代碼x = 11,大內存會開闢另外一個小空間存儲變量值11,把變量值綁定另外一個門牌號x,可是因爲以前有x,因此大內存會解除x與10的鏈接,讓x與11鏈接。這個時候10因爲沒有了門牌號,因此成爲了python眼中的垃圾,python就會處理這個垃圾,釋放10的內存佔用,這就是python的垃圾回收機制。而其餘語言須要手動把10的內存佔用釋放掉。字符串

如:pycharm

height = 180  # 定義變量
# print(180) # print會自動幫你建立一個變量180,打印完以後,立刻釋放180的內存空間

3、引用數

舉例:從上述的解釋咱們能夠知道只要某個變量值綁定着門牌號,就不是垃圾,反之變量值沒有綁定着門牌號,這個變量值就是垃圾,python就會自動清理這個垃圾。這裏咱們對於這個門牌號給定一個專業的解釋,在python中這個門牌號被稱做引用計數。

如:

#引用計數
x = height  # 180的引用計數加1

del x   # 釋放的是引用計數,180的引用計數爲1

del height # 引用計數爲0,

# 引用計數爲0時,觸發垃圾回收機制,釋放內存佔用

4、小整數池

對於上一節講的引用計數,須要注意的是:Python實現int的時候有個小整數池。爲了不因建立相同的值而重複申請內存空間所帶來的效率問題。==Python解釋器會在啓動時建立出小整數池,範圍是[-5,256],該範圍內的小整數對象是全局解釋器範圍內被重複使用,永遠不會被垃圾回收機制回收。==在pycharm中運行python程序時,pycharm出於對性能的考慮,會擴大小整數池的範圍,其餘的字符串等不可變類型也都包含在內一便採用相同的方式處理了,咱們只須要記住這是一種優化機制,至於範圍到底多大,無需細究。

相關文章
相關標籤/搜索