這章我們講可變與不可變類(lèi)型,可變與不可變類(lèi)型是對(duì)我們前面學(xué)的基本數(shù)據(jù)類(lèi)型,整型、浮點(diǎn)型、字符串類(lèi)型、列表類(lèi)型、字典類(lèi)型以及布爾值類(lèi)型,這些類(lèi)型到底是可以改變?;鬯虏豢梢愿淖?,從這個(gè)角度懟他們進(jìn)行分類(lèi)。
到底什么是可變類(lèi)型呢?可變類(lèi)型指的是,值改變的情況下,id不變,說(shuō)明改的是原值對(duì)吧,這里我們說(shuō)的值是指堆區(qū)里面的內(nèi)容。
然后我們?cè)賮?lái)看不可變類(lèi)型,理解了前面可變類(lèi)型的意思,不可變類(lèi)型就簡(jiǎn)單了。就是值改變的情況下,id也改變了。
先以字符串舉個(gè)例子,我先定義一個(gè)name=‘于謙’,然后再改變一下把于謙換成郭德綱,再打印出來(lái)看他們兩個(gè)的id是否一樣,如果不一樣,那就說(shuō)明字符串是不可變類(lèi)型。
我們看到打印出來(lái)的兩個(gè)id是完全的不一樣的。所有的賦值操作,都會(huì)申請(qǐng)新的內(nèi)存空間,產(chǎn)生新的值。
還有整型、浮點(diǎn)型、布爾值類(lèi)型都是不可變類(lèi)型。,它們都是不可分割的整體,不能被改變。
都可以用剛才的方法再去驗(yàn)證一下,這里我就不再演示了。
但是列表和字典就算你用剛剛的驗(yàn)證方法來(lái)看,id都是會(huì)改變的。就是容器類(lèi)型有一點(diǎn)不一樣,就那列表來(lái)說(shuō),列表里的某一個(gè)值,我們都是可以單獨(dú)進(jìn)行改變的。
我先定義一個(gè)列表,然后我在打印一下列表的id號(hào),接著我把列表的1號(hào)索引的只改變一下,然后再打印列表,證明我已經(jīng)改變過(guò)值了。然后繼續(xù)打印列表的id號(hào),但是兩個(gè)id都是一樣的。
這就說(shuō)明,列表里面包含多個(gè)內(nèi)存地址,我們改的只是其中意的,但是列表本身的內(nèi)存地址我們沒(méi)有去改變它,所以說(shuō)列表是可變類(lèi)型。
到這里我想你們應(yīng)該明白了,列表和字典這兩種容器類(lèi)型就是可變類(lèi)型,字典我就不去驗(yàn)證了,你們可以自己練習(xí)一下。
不過(guò)字典我在這里需要補(bǔ)充一下,前面我們說(shuō)過(guò)字典是在大括號(hào)‘{}‘’內(nèi)用逗號(hào)‘,’分隔多個(gè)key:value,這個(gè)value可以是任意類(lèi)型的值。
但是字典的key必須是不可變類(lèi)型。我們也說(shuō)過(guò)字典的key我們一般情況下都是字符串類(lèi)型,整型、浮點(diǎn)型、字符串類(lèi)型甚至布爾值類(lèi)型都可以當(dāng)作字典的key。
這種情況基本不會(huì)發(fā)生,我們正常都不會(huì)這寫(xiě)字典。
未經(jīng)允許不得轉(zhuǎn)載:445IT之家 » Python可變和不可變類(lèi)型