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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

Python的可变类型与不可变类型

發(fā)布時(shí)間:2023/12/31 python 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python的可变类型与不可变类型 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Python基礎(chǔ)知識(shí),自己寫一寫比較不容易忘

?

Python的每個(gè)對(duì)象都分為可變和不可變,主要的核心類型中,數(shù)字、字符串、元組是不可變的,列表、字典是可變的。

?

對(duì)不可變類型的變量重新賦值,實(shí)際上是重新創(chuàng)建一個(gè)不可變類型的對(duì)象,并將原來(lái)的變量重新指向新創(chuàng)建的對(duì)象(如果沒(méi)有其他變量引用原有對(duì)象的話(即引用計(jì)數(shù)為0),原有對(duì)象就會(huì)被回收)。

?

不可變類型以int類型為例:實(shí)際上 i += 1 并不是真的在原有的int對(duì)象上+1,而是重新創(chuàng)建一個(gè)value為6的int對(duì)象,i引用自這個(gè)新的對(duì)象。

>>> i = 5 >>> i += 1 >>> i 6

通過(guò)id函數(shù)查看變量i的內(nèi)存地址進(jìn)行驗(yàn)證(使用hex(id(i)) 可以查看16進(jìn)制的內(nèi)存地址)

>>> i = 5 >>> i += 1 >>> i 6 >>> id(i) 140243713967984 >>> i += 1 >>> i 7 >>> id(i) 140243713967960

可以看到執(zhí)行 i += 1 時(shí),內(nèi)存地址都會(huì)變化,因?yàn)閕nt 類型是不可變的。

再改改代碼,但多個(gè)int類型的變量值相同時(shí),看看它們內(nèi)存地址是否相同。

>>> i = 5 >>> j = 5 >>> id(i) 140656970352216 >>> id(j) 140656970352216 >>> k = 5 >>> id(k) 140656970352216 >>> x = 6 >>> id(x) 140656970352192 >>> y = 6 >>> id(y) 140656970352192 >>> z = 6 >>> id(z) 140656970352192

對(duì)于不可變類型int,無(wú)論創(chuàng)建多少個(gè)不可變類型,只要值相同,都指向同個(gè)內(nèi)存地址。同樣情況的還有比較短的字符串。

對(duì)于其他類型則不同,以浮點(diǎn)類型為例,從代碼運(yùn)行結(jié)果可以看出它是個(gè)不可變類型:對(duì)i的值進(jìn)行修改后,指向新的內(nèi)存地址。

>>> i = 1.5 >>> id(i) 140675668569024 >>> i = i + 1.7 >>> i 3.2 >>> id(i) 140675668568976

修改代碼聲明兩個(gè)相同值的浮點(diǎn)型變量,查看它們的id,發(fā)現(xiàn)它們并不是指向同個(gè)內(nèi)存地址,這點(diǎn)和int類型不同(這方面涉及Python內(nèi)存管理機(jī)制,Python對(duì)int類型和較短的字符串進(jìn)行了緩存,無(wú)論聲明多少個(gè)值相同的變量,實(shí)際上都指向同個(gè)內(nèi)存地址。)。

>>> i = 2.5 >>> id(i) 140564351733040 >>> j = 2.5 >>> id(j) 140564351733016

?

可變類型的話,以list為例。list在append之后,還是指向同個(gè)內(nèi)存地址,因?yàn)閘ist是可變類型,可以在原處修改。

>>> a = [1, 2, 3] >>> id(a) 4385327224 >>> a.append(4) >>> id(a) 4385327224

改改代碼,當(dāng)存在多個(gè)值相同的不可變類型變量時(shí),看看它們是不是跟可變類型一樣指向同個(gè)內(nèi)存地址

>>> a = [1, 2, 3] >>> id(a) 4435060856 >>> b = [1, 2, 3] >>> id(b) 4435102392

從運(yùn)行結(jié)果可以看出,雖然a、b的值相同,但是指向的內(nèi)存地址不同。我們也可以通過(guò)b = a 的賦值語(yǔ)句,讓他們指向同個(gè)內(nèi)存地址:

>>> a = [1, 2, 3] >>> id(a) 4435060856 >>> b = [1, 2, 3] >>> id(b) 4435102392 >>> b = a >>> id(b) 4435060856

這個(gè)時(shí)候需要注意,因?yàn)閍、b指向同個(gè)內(nèi)存地址,而a、b的類型都是List,可變類型,對(duì)a、b任意一個(gè)List進(jìn)行修改,都會(huì)影響另外一個(gè)List的值。

>>> b.append(4) >>> a [1, 2, 3, 4] >>> b [1, 2, 3, 4] >>> id(a) 4435060856 >>> id(b) 4435060856

代碼中,b變量append(4),對(duì)a變量也是影響的。輸出他們的內(nèi)存地址,還是指向同個(gè)內(nèi)存地址。

轉(zhuǎn)載于:https://www.cnblogs.com/blackmatrix/p/5614086.html

總結(jié)

以上是生活随笔為你收集整理的Python的可变类型与不可变类型的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。