在python中一切皆對(duì)象。在Python中不存在所謂的值傳遞調(diào)用,一切傳遞都是對(duì)象的引用,也可認(rèn)為是傳址。
python中,對(duì)象分為可變(mutable)和不可變(immutable)兩種類型,元組(tuple)、數(shù)值型(number)、字符串(string)均為不可變對(duì)象,而字典型(dictionary)和列表型(list)的對(duì)象是可變對(duì)象。
不可變對(duì)象
見一個(gè)例子,分析不可變對(duì)象的特點(diǎn)
python內(nèi)置id()函數(shù),用于返回對(duì)象的唯一標(biāo)識(shí)(identity)。id()返回的是十進(jìn)制,對(duì)象實(shí)際內(nèi)存地址為hex(id(object)),本文中將id()與hex(id())等價(jià)使用。
>>>a=1#將變量a與內(nèi)存中的值為1的內(nèi)存綁定在一起
>>>a=2#將變量a與內(nèi)存中值為2的內(nèi)存綁定在一起,并不是修改原來(lái)a綁定的內(nèi)存中的值,
#這時(shí),原來(lái)的這個(gè)值為1的內(nèi)存地址的引用次數(shù)減一,當(dāng)引用計(jì)數(shù)為0時(shí),內(nèi)存地址被回收
>>>b=a#變量b綁定與a一樣的內(nèi)存
>>>id(b),id(a)#打印a,b的綁定的內(nèi)存地址
(1972461824,1972461824)
>>>b=3#創(chuàng)建一個(gè)內(nèi)存值為3的內(nèi)存地址與變量名字b進(jìn)行綁定。這時(shí),a還是指向值為2的內(nèi)存地址
>>>a,b
(2,3)
>>>id(b),id(a)#打印a,b的綁定的內(nèi)存地址
(1972461856,1972461824)
>>>x=1
>>>y=1
>>>z=1
>>>xisy
True
>>>yisz
True
>>>id(x),id(y),id(z)
(1972461792,1972461792,1972461792)
從第二個(gè)例子可看出因?yàn)檎麛?shù)為不可變對(duì)象,x,y,z在內(nèi)存中均指向一個(gè)值為1的內(nèi)存地址。
不可變對(duì)象最大的優(yōu)點(diǎn)便是減少重復(fù)的值對(duì)內(nèi)存空間的占用。
缺點(diǎn)便是如第一個(gè)例子中所示,我要修改這個(gè)變量綁定的值,如果內(nèi)存中沒有存在該值的內(nèi)存塊,那么必須重新開辟一塊內(nèi)存,把新地址與變量名綁定。
而不是修改變量原來(lái)指向的內(nèi)存塊的值,這回給執(zhí)行效率帶來(lái)一定的降低。
原來(lái)的內(nèi)存塊會(huì)因變量與其他內(nèi)存塊綁定而引用次數(shù)減1.
以上內(nèi)容為大家介紹了python的不可變對(duì)象,希望對(duì)大家有所幫助,如果想要了解更多Python相關(guān)知識(shí),請(qǐng)關(guān)注IT培訓(xùn)機(jī)構(gòu):千鋒教育。