一、python記憶體
因為要呼叫while迴圈,迴圈內有temp變數,不清楚python是否會在每一輪迴圈結束後自動釋放temp記憶體空間,做了乙個記憶體測試,發現無論temp = none,還是del temp,只能銷毀變數,無法完全釋放記憶體空間。注:紅色部分標出相同記憶體id。
[python]view plain
copy
>>>
fori
inrange(
3):
temp = i
temp,id(temp)
0 36666732
1 36666720
2 36666708
[python]view plain
copy
>>>
fori
inrange(4,
7):
"white-space:pre"
> temp = i
"white-space:pre"
>
temp,id(temp)
"white-space:pre"
> temp =
none
4 36666684
5 36666672
6 36666660
[python]view plain
copy
>>>
fori
inrange(7,
10):
temp = i
temp,id(temp)
deltemp
7 36666648
8 36666636
9 36666624
[python]view plain
copy
>>> a =
1>>> id(a)
36666720
[python]view plain
copy
>>> b =
5>>> id(b)
36666672
[python]view plain
copy
>>> c =
8>>> id(c)
36666636
測試完畢後刪除c可以看到,變數c和temp確實被銷毀,只是他們指向的引用值仍然會在記憶體中存在。直至視窗關閉才自動釋放,人工無法干預。
[plain]view plain
copy
>>> del c
[plain]view plaincopy
>>> id(c)
traceback (most recent call last):
file "", line 1, in
id(c)
nameerror: name 'c' is not defined
>>> id(temp)
traceback (most recent call last):
file "", line 1, in
id(temp)
nameerror: name 'temp' is not defined
>>> id(5)
36666672
>>> id(10)
36666612
>>> id(100000)
41708736
>>> id("1234")
46118528
>>> d = "1234"
>>> id(4)
36666684
二、記憶體池機制
檢視了相關的部落格,更深一步了解python記憶體機制
python的記憶體機制以金字塔行,-1,-2層主要有作業系統進行操作,
第0層是c中的malloc,free等記憶體分配和釋放函式進行操作;
第1層和
第2層是記憶體池,有python的介面函式pymem_malloc函式實現,當物件小於256k時有該層直接分配記憶體;
第3層是最上層,也就是我們對python物件的直接操作;
在 c 中如果頻繁的呼叫 malloc 與 free 時,是會產生效能問題的.再加上頻繁的分配與釋放小塊的記憶體會產生記憶體碎片. python 在這裡主要幹的工作有:
如果請求分配的內存在1~256位元組之間就使用自己的記憶體管理系統,否則直接使用 malloc.
這裡還是會呼叫 malloc 分配記憶體,但每次會分配一塊大小為256k的大塊記憶體.
經由記憶體池登記的記憶體到最後還是會**到記憶體池,並不會呼叫 c 的 free 釋放掉.以便下次使用.
對於簡單的python物件,例如數值、字串,元組(tuple不允許被更改)採用的是複製的方式(深拷貝?),也就是說當將另乙個變數b賦值給變數a時,雖然a和b的記憶體空間仍然相同,但當a的值發生變化時,會重新給a分配空間,a和b的位址變得不再相同
而對於像字典(dict),列表(list)等,改變乙個就會引起另乙個的改變,也稱之為淺拷貝
python記憶體管理機制
a 1整數1為乙個物件。而a是乙個引用。利用賦值語句,引用a指向物件1。在python中,整數和短小的字元,python都會快取這些物件,以便重複使用。當我們建立多個等於1的引用時,實際上是讓所有這些引用指向同乙個物件。a 1 b 1 print id a print id b 在python中,每...
python記憶體管理機制
1.引用計數 當乙個python物件被引用時 其引用計數增加 1 當其不再被變數引用時 引用計數減 1 當物件引用計數等於 0 時,物件被刪除 引用計數是一種非常高效的記憶體管理機制 2.垃圾 垃圾 機制 引用計數 標記清除 分帶 引用計數 引用計數也是一種垃圾收集機制,而且也是一種最直觀,最簡單的...
Python記憶體管理機制
由於python中萬物皆物件,所以python的儲存問題是物件的儲存問題,並且對於每個物件,python會分配一塊記憶體空間去儲存它 注意 變數名沒有型別,型別屬於物件 因為變數引用物件,所以型別隨物件 變數引用什麼型別的物件,變數就是什麼型別的。a 123 b a print id a print...