想要弄清楚記憶體相關的問題,就要理清楚:變數、記憶體位址、值之間的關係: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_list = [data,data,data,data,data,data,data,data,data,data]data指向乙個記憶體位址,記憶體位址的下的值被修改,所以最後data=data_list=[,,,,...] 一共9個data = {}
for item in range(10):
data['user'] = i
print(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,...