日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python内存相关

發布時間:2024/9/30 python 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python内存相关 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Python內存相關

示例一:

v1 = [1, 2, 3] v2 = [1, 2 ,3]v1 = 123 v2 = 123v1 = "dogfa" v2 = "dogfa" # 雖然v1 和v2 的值相同,但是由于v1和v2 在內存中分別開辟了兩塊不同的空間,所以理論上v1的內存地址不等于v2的內存地址 (在Python中有不同變化,下面會介紹)

示例二:

v1 = [1, 2, 3] v1 = [4, 5, 6] # v1最開始指向的內存地址是[1, 2, 3],但是由于對v1進行了重新賦值,所以v1重新指向了內存地址中的[4, 5, 6],這個時候原來v1 指向的內存地址中的[1, 2, 3]由于沒有變量接收,將會被Python中的GC(垃圾回收機制)釋放掉。

示例三:

v1 = [1, 2, 3] v2 = v1 v2.append(4) print(v1) # [1, 2, 3, 4] print(v2) # [1, 2, 3, 4] # v1 的內存地址指向了[1, 2, 3],v2 = v1 表示將v1 的內存地址賦值給了v2, 也就意味著v2的內存地址也指向著[1, 2, 3],無論對v1 中的元素還是對v2 中的元素進行改變,都將互相影響。v1 = [1, 2, 3] v2 = v1 v1 = 123 print(v1) # 123 print(v2) # [1, 2, 3] # 首先v1 和v2 指向了同一個內存地址,但是后來對v1 進行了重新賦值,v1所指向的內存地址發生了改變,而v2所指向的內存地址并沒有發生改變,還是原先v1 所指向的內存地址,所以print(v1)將輸出 “123”, print(v2)將輸出[1, 2, 3]v1 = "dogfa" v2 = v1 v1 = "oldniu" print(v1) # oldniu print(v2) # dogfa

示例四:

v = [1, 2, 3] lst = [11, 22, v] v.append(4) print(v) # [1, 2, 3, 4] print(lst) # [11, 22, [1, 2, 3, 4]] # lst 中的v 實際上存放的是指向的內存地址v = [1, 2, 3] lst = [11, 22, v] lst[2].append(4) print(v) # [1, 2, 3, 4] print(lst) # [11, 22, [1, 2, 3, 4]]v = [1, 2, 3] lst = [11, 22, v] v = 4 print(v) # 4 print(lst) # [11, 22, [1, 2, 3]] # v 的內存地址發生了改變,而lst中的v指向并沒有發生改變v = [1, 2, 3] lst = [11, 22, v] lst[2] = 33 print(v) # [1, 2, 3] print(lst) # [11, 22, 33] 結論:當變量屬于不可變類型時(strinttuple),對其重新賦值,將會開辟新的內存空間。當變量屬于可變類型時(listdictset),對其內部的元素進行操作時,將不會重新開辟內存空間,對整個變量進行賦值時,將會開辟新的內存空間。

小數據池

-------------------------------------------------------------------- 注:如果你對python感興趣,我這有個學習Python基地,里面有很多學習資料,感興趣的+Q群:895817687 -------------------------------------------------------------------- v1 = 123 v2 = 123 print("int:", id(v1)) print(id(v2))v1 = "dogfa" v2 = "dogfa" print("str:", id(v1)) print(id(v2))

理論上v1和v2的內存地址是不一樣的,但是結果是否真的如此嗎?以下是打印輸出結果。
從打印結果我們 可以看出內存地址是完全一致的,那么是否意味著我們之前所認為的全都是錯誤的?其實并不是的。

因為在Python當中有一個小數據池,你可以理解為是一個容器,里面存放了int類型和str類型的數據的存儲規則。

1、int類型的規則:它會把 -5 ~ 256 范圍內的數進行緩存,當你將這些整數賦值給變量時,它不會再次開辟新的內存空間,而是使用已經創建好的緩存對象。

2、str類型的規則:① 出現特殊字符時,內存地址不相等

? ② 當字符超過20個以上時,內存地址不會相等

is 和 == 的區別

1:is:對內存地址進行比較

v1 = 123 v2 = v1 print(v1 is v2) # True v1 = 321 print(v1 is v2) # False

==:對兩邊的值進行比較

v1 = 6 v2 = 6 print(v1 == v2) # True

總結

以上是生活随笔為你收集整理的Python内存相关的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。