python記憶體相關問題

2022-06-26 23:54:10 字數 3071 閱讀 3753

想要弄清楚記憶體相關的問題,就要理清楚:變數、記憶體位址、值之間的關係:

1.程式裡什麼時候分配新的記憶體位址?

答:1.定義乙個變數,記憶體就開闢乙個記憶體空間,分配乙個記憶體位址.

特殊:如:a=687

a=197

print(a)# 輸出197

這是2記憶體個位址,輸出a,是輸出第二a的個值,a指向值為197的記憶體位址,第乙個a的值687 還存在,但是a不指向它了,

2.乙個列表裡的變數存放的是啥?

答:放的是變數的記憶體位址

3.變數的型別可以是哪些?

答:整數,字串,列表,字典,元組,所有資料型別

4.判斷操作是賦值 還是 修改變數的值?

答:4.1 如果是賦值則:開闢新的記憶體空間,分配新的記憶體位址(python小資料池除外)

請體會如下3種賦值的不同

第一種:開闢了新的記憶體空間

第三種:(記)python小資料池中只要數值相同,記憶體位址就相同,這是python的快取機制

4.2 如果是修改變數本身的值:

5.python的小資料池對記憶體位址的影響?

答:資料範圍以內的數[-5,256],只要數值相同,記憶體位址就相同

補充:# 按理 v1 和 v2 應該是不同的記憶體位址。特殊:

1. 整型: -5 ~ 256

2. 字串:"alex",'asfasd asdf asdf d_asdf ' ----"f_*" * 3 - 重新開闢記憶體

6.python變數數值垃圾**機制

如 a=30

a=20

a被賦了新值 20 ,之前的值 30 會被直譯器垃圾**機制自動 **

##################################   分隔符   #####################################

變數是為了寫**方便理解,其實是變數指向乙個值的記憶體位址,

重新賦值,原來的值沒有改,還在記憶體中,只是沒有變數,指向它的記憶體位址了,

乙個值對應乙個記憶體位址,兩個一樣的值也是2個位址(python小資料池除外)

1.不可修改的資料型別,string...等、或其他 內建函式 操作後 ,產生新的值, 舊值沒有改變,新值沒有變數指向

##################################   分隔符   #####################################

'''

23. v1 = '人生苦短,我用python'  # v1 是乙個變數,指向'人生苦短,我用python'的記憶體位址
v2 = [1,2,3,4,v1]   #注 這裡的v1,放的是v1的記憶體位址,v1 = "人生苦短,用毛線python"print(v2)# 輸出 [1, 2, 3, 4, '人生苦短,我用python']

而 v2中元素v1存放的是第乙個v1的記憶體位址所對應的值。

''''''24. 看**寫結果並解釋原因data_list =

data = {}

for item in range(10):

data['user'] = i

print(data_list)

輸出:[,,,,...] 一共9個

data_list = [data,data,data,data,data,data,data,data,data,data]data指向乙個記憶體位址,記憶體位址的下的值被修改,所以最後data=data_list=[,,,,...] 一共9個

''''''25. 看**寫結果並解釋原因data_list =

for item in range(10):

data = {}

data['user'] = i

print(data_list)

輸出: [,,,,,,,,,,]

每次迴圈經過data = {} ,都新增加乙個新的字典變數,開闢乙個新的記憶體位址,再對字典新增鍵值對,最後追加到列表data_list中

對比第一種

第二種

python 記憶體相關

1.proc pid status 可以檢視程序相關的詳細資訊,當記憶體異常時可檢視 參考 2.top p 程序號 實時檢視程序相關記憶體 3.記憶體除錯 參考 memory profiler檢視函式中各行 的記憶體增長 guppy檢視python物件占用的堆記憶體大小 4.檢視變數引用計數 imp...

python 記憶體相關

1.proc pid status 可以檢視程序相關的詳細資訊,當記憶體異常時可檢視 參考 2.top p 程序號 實時檢視程序相關記憶體 3.記憶體除錯 參考 memory profiler檢視函式中各行 的記憶體增長 guppy檢視python物件占用的堆記憶體大小 4.檢視變數引用計數 imp...

Python記憶體相關

示例一 v1 1,2,3 v2 1,2 3 v1 123 v2 123 v1 dogfa v2 dogfa 雖然v1 和v2 的值相同,但是由於v1和v2 在記憶體中分別開闢了兩塊不同的空間,所以理論上v1的記憶體位址不等於v2的記憶體位址 在python中有不同變化,下面會介紹 示例二 v1 1,...