(2018-04-08.Python從Zero到One)一、python高級編程__1.3.1垃圾回收

上一篇文章為:→1.2.8屬性property

垃圾回收

1. 小整數對象池

整數在程序中的使用非常廣泛,Python為了優(yōu)化速度,使用了小整數對象池, 避免為整數頻繁申請和銷毀內存空間。

Python 對小整數的定義是 [-5, 257) 這些整數對象是提前建立好的,不會被垃圾回收。在一個 Python 的程序中,所有位于這個范圍內的整數使用的都是同一個對象.

同理,單個字母也是這樣的。

但是當定義2個相同的字符串時,引用計數為0,觸發(fā)垃圾回收

2. 大整數對象池

每一個大整數,均創(chuàng)建一個新的對象。

day13_其他知識-01.png

3. intern機制

a1 = "HelloWorld"
a2 = "HelloWorld"
a3 = "HelloWorld"
a4 = "HelloWorld"
a5 = "HelloWorld"
a6 = "HelloWorld"
a7 = "HelloWorld"
a8 = "HelloWorld"
a9 = "HelloWorld"

python會不會創(chuàng)建9個對象呢?在內存中會不會開辟9個”HelloWorld”的內存空間呢? 想一下,如果是這樣的話,我們寫10000個對象,比如a1=”HelloWorld”…..a1000=”HelloWorld”, 那他豈不是開辟了1000個”HelloWorld”所占的內存空間了呢?如果真這樣,內存不就爆了嗎?所以python中有這樣一個機制——intern機制,讓他只占用一個”HelloWorld”所占的內存空間。靠引用計數去維護何時釋放。

day13_其他知識-02.png

總結

  • 小整數[-5,257)共用對象,常駐內存

  • 單個字符共用對象,常駐內存

  • 單個單詞,不可修改,默認開啟intern機制,共用對象,引用計數為0,則銷毀


    day13_其他知識-03.png
  • 字符串(含有空格),不可修改,沒開啟intern機制,不共用對象,引用計數為0,銷毀


    day13_其他知識-04.png
  • 大整數不共用內存,引用計數為0,銷毀


    day13_其他知識-05.png
  • 數值類型和字符串類型在 Python 中都是不可變的,這意味著你無法修改這個對象的值,每次對變量的修改,實際上是創(chuàng)建一個新的對象


    day13_其他知識-06.png

下一篇文章為:→1.3.2垃圾回收(二)
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容