Python中可變類型和不可變類型及引用的示例分析-創(chuàng)新互聯(lián)

這篇文章將為大家詳細(xì)講解有關(guān)Python中可變類型和不可變類型及引用的示例分析,小編覺得挺實(shí)用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

站在用戶的角度思考問題,與客戶深入溝通,找到乳山網(wǎng)站設(shè)計(jì)與乳山網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、主機(jī)域名雅安服務(wù)器托管、企業(yè)郵箱。業(yè)務(wù)覆蓋乳山地區(qū)。

在Python中定義一個數(shù)據(jù)便在內(nèi)存中開辟一片空間來存儲這個變量的值,這塊已經(jīng)被分配的內(nèi)存空間便會有一個內(nèi)存地址。訪問這塊內(nèi)存需要用到變量名,變量名實(shí)際存儲的是變量的地址在內(nèi)存中的地址,但是使用print()函數(shù)得到的確實(shí)這塊內(nèi)存中實(shí)際的地址。這個就當(dāng)成規(guī)定就好,沒必要糾結(jié)。

獲得變量在內(nèi)存中的地址,可以使用id()函數(shù)。

常規(guī)使用

變量之間的賦值其實(shí)是把一個變量的內(nèi)存地址傳遞給另一個變量,這樣兩個變量便都指向內(nèi)存中的同一塊空間,因此這兩個變量的之是相等的

a = 1
b = a
print("a:%d  b:%d" % (a,b))
print(id(a))
print(id(b))
結(jié)果:
a:1  b:1
1711072016

此時如果有第三個變量c的值與a的相等,那么c的地址與a的地址一樣。這一點(diǎn)請大家牢記。

a = 1
c = 1
print("a:%d  c:%d" % (a,c))
print(id(a))
print(id(c))
結(jié)果:
a:1  c:1
1711072016

此時如果修改變量c的值,那么會在內(nèi)存中新開辟一塊內(nèi)存來存儲這個變量,這塊新的內(nèi)存地址將會賦值給c。

a = 1
c = 1
c = 2
print("a:%d  c:%d" % (a,c))
print(id(a))
print(id(c))
結(jié)果:
a:1  c:2
1711072032

基本數(shù)據(jù)類型作為函數(shù)參數(shù)

基本數(shù)據(jù)類型作為函數(shù)實(shí)參同樣是這個道理。

a = 1
print(id(a))
def func(x):
  print(id(x))
  x = 2
  print(id(x))
 
func(a)
結(jié)果:
1711072016

列表、字典等高級數(shù)據(jù)類型的引用

列表字典等高級數(shù)據(jù)類型的變量名同樣存儲的變量的實(shí)際地址,一個列表名賦值給另一個變量,那么這兩個變量便指向內(nèi)存中的同一塊地址。

list1 = [1,2,3]
list2 = list1
print(list1,list2)
print(id(list1),id(list2))
結(jié)果:
[1, 2, 3] [1, 2, 3]
57931896

高級數(shù)據(jù)類型在每集加載進(jìn)內(nèi)存的時候內(nèi)存地址與上一次可能會不同。

此時如果修改list2,也會影響list1的值,但是兩個變量在內(nèi)存中的地址還是不變的。這一點(diǎn)是與基本數(shù)據(jù)類型不一樣的。

list1 = [1,2,3]
list2 = list1
print(list1,list2)
print(id(list1),id(list2))
list2.append(4)
print(list1,list2)
print(id(list1),id(list2))
 
結(jié)果:
[1, 2, 3] [1, 2, 3]
43841656
[1, 2, 3, 4] [1, 2, 3, 4]
43841656

此時如果有第三個列表list3的值也是[1,2,3,4],可以推測list3的地址與list1的地址應(yīng)該是一樣的,但是事實(shí)并非如此。如果有第三個列表list3的值也是[1,2,3,4],相當(dāng)于在內(nèi)存中新開辟一塊內(nèi)存來存儲這個值。

list1 = [1,2,3]
list2 = list1
list3 = [1,2,3]
print(list1,list2,list3)
print(id(list1),id(list2),id(list3))
結(jié)果:
[1, 2, 3] [1, 2, 3] [1, 2, 3]
16775288 16776768

可變數(shù)據(jù)類型與不可變數(shù)據(jù)類型

在python中哪些是可變數(shù)據(jù)類型,哪些是不可變數(shù)據(jù)類型。可變數(shù)據(jù)類型:列表list和字典dict;不可變數(shù)據(jù)類型:整型int、浮點(diǎn)型float、字符串型string和元組tuple。

用一句話來概括上述過程就是:“python中的不可變數(shù)據(jù)類型,不允許變量的值發(fā)生變化,如果改變了變量的值,相當(dāng)于是新建了一個對象,而對于相同的值的對象,在內(nèi)存中則只有一個對象,內(nèi)部會有一個引用計(jì)數(shù)來記錄有多少個變量引用這個對象;可變數(shù)據(jù)類型,允許變量的值發(fā)生變化,即如果對變量進(jìn)行append、+=等這種操作后,只是改變了變量的值,而不會新建一個對象,變量引用的對象的地址也不會變化,不過對于相同的值的不同對象,在內(nèi)存中則會存在不同的對象,即每個對象都有自己的地址,相當(dāng)于內(nèi)存中對于同值的對象保存了多份,這里不存在引用計(jì)數(shù),是實(shí)實(shí)在在的對象。

關(guān)于“Python中可變類型和不可變類型及引用的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

新聞標(biāo)題:Python中可變類型和不可變類型及引用的示例分析-創(chuàng)新互聯(lián)
本文網(wǎng)址:http://muchs.cn/article14/dppide.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護(hù)做網(wǎng)站、移動網(wǎng)站建設(shè)、網(wǎng)站內(nèi)鏈響應(yīng)式網(wǎng)站、企業(yè)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)