python記憶體分析

2021-09-10 09:05:34 字數 1546 閱讀 7926

"""

python記憶體分析

記憶體分析必須了解的兩點:

1. python中不可變型別佔固定的位置,其值不可以改變,基本資料型別和元組為不可變資料型別,

基本資料型別(數字(int、float、complex)、字串str、布林值bool、),元組tuple.

2. python中採用引用計數,所有的變數都是引用,指向不可變資料型別(既儲存不可變型別的位址,給已有指向(或有值的變數)賦值實為改變變數的指向)

"""

示例1

# 定義了乙個變數x,其指向一片記憶體空間(假設4的記憶體位址為0x1111,則x的值為0x1111)

x = 4

# 定義了乙個變數y,將x的值賦值給y,y的值為0x1111,既y也指向4所在的那一片記憶體空間

y = x

# 當我們列印x和y時,python會根據變數x,y儲存的位址找到4所在的空間,取出那片空間的值4,既列印輸出4

print(x)

print(y)

cmd截圖、記憶體指向分析

當改變y的指向時,既y指向了3所在的記憶體空間

由測試可以看出當沒有改變y時id(x),id(y)的位址一樣,既他們指向了同一塊記憶體空間,當改變y後y指向了另一塊空間。

示例2當函式傳遞不可變型別時:

def test1(x):

print("改變前x的輸出——>", x)

print("改變前x的id——>", id(x))

x += 1

print("改變後x的輸出——>", x)

print("改變後x的id——>", id(x))

x -= 1

print("2次改變後x的輸出——>", x)

print("2次改變後x的id——>", id(x))

if __name__ == "__main__":

y = 3

print("傳參前y的id——>", id(y))

傳參前y的id與傳參後的id值一樣,既他們指向同一片記憶體空間(那片空間存著乙個值3),當第一次改變形參的值的,它的id發生了變化,既指向發生了變化(指向了4所在的記憶體空間),2次改變後再指向3所在的記憶體空間,而且與之前的3的記憶體空間一致,故3佔據著一片固定的記憶體空間。

python 記憶體分析 python 記憶體分析

1 改原始碼重新編譯列印相關資訊 obmalloc.c 檔案中列印 maxarenas,值為當前環境分配 arena 個數 分配 arena 時並沒有馬上分配對應的pools,故對於每乙個 arena,nfreepools 和 ntotalpools 為分配pool的可用pool數和總pool數。i...

python 記憶體分析 python記憶體管理分析

記憶體管理,對於python這樣的動態語言,是至關重要的一部分,它在很大程度上甚至決定了python的執行效率,因為在python的執行中,會建立和銷毀大量的物件,這些都涉及到記憶體的管理。小塊空間的記憶體池 在python中,許多時候申請的記憶體都是小塊的記憶體,這些小塊記憶體在申請後,很快又會被...

python 記憶體分析

python 在執行是,python直譯器會向作業系統申請執行記憶體,將 載入到記憶體中執行,如圖所示 python 直譯器為了利用好有限的記憶體空間,將記憶體進行了如圖的劃分 不可變型別 資料在記憶體中一旦建立,就不能修改了。python 為了優化程式執行速度,將字串 整數定義成了不可變型別,一旦...