更新時(shí)間:2019年10月09日15時(shí)07分 來(lái)源:傳智播客 瀏覽次數(shù):
Python中的可變和不可變數(shù)據(jù)類(lèi)型的分類(lèi)依據(jù), 指的是保存數(shù)據(jù)的源內(nèi)存空間的數(shù)據(jù)是否允許修改。
1. 不可變數(shù)據(jù)類(lèi)型
源內(nèi)存空間中數(shù)據(jù)不允許修改, 如果想要修改, 只能開(kāi)辟新內(nèi)存空間,讓變量引用指向新內(nèi)存空間數(shù)據(jù)的地址。
包括: int (整數(shù)類(lèi)型) float (浮點(diǎn)數(shù)類(lèi)型) bool (布爾類(lèi)型) str (字符串類(lèi)型) tuple(元組類(lèi)型)。
比如: 下面以float 浮點(diǎn)數(shù)類(lèi)型為例。
上述圖示中可以清楚的看出, float是不可變數(shù)據(jù)類(lèi)型, 其修改數(shù)據(jù)前后的引用數(shù)據(jù)的id()地址值發(fā)生了變化。
再比如: 我們以元組為例, 說(shuō)明元組也是不可變的數(shù)據(jù)類(lèi)型。
可以看出, 對(duì)元組使用+=操作時(shí),元組的前后數(shù)據(jù)改變了, 而且引用數(shù)據(jù)的地址也發(fā)生了改變,元組原來(lái)內(nèi)存空間中的數(shù)據(jù)不允許修改, 所以,元組是不可變數(shù)據(jù)類(lèi)型。
再比如: 下邊以字符串為例, 證明字符串也是不可變數(shù)據(jù)類(lèi)型。
從上面的圖示可以很清晰的看出, 修改數(shù)據(jù)的前后, 字符串引用數(shù)據(jù)的地址發(fā)生了變化, 原內(nèi)存空間的數(shù)據(jù)不允許修改, 因此字符串是不可變數(shù)據(jù)類(lèi)型。
因此可以得出結(jié)論, 不可變數(shù)據(jù)類(lèi)型, 變量引用原內(nèi)存空間中數(shù)據(jù)不允許修改, 如果想要修改, 只能開(kāi)辟新內(nèi)存空間,讓變量引用指向新內(nèi)存空間數(shù)據(jù)的地址?!就扑]了解軟件測(cè)試培訓(xùn)課程】
2. 可變數(shù)據(jù)類(lèi)型
概念: 源內(nèi)存空間中的數(shù)據(jù)可以修改不需要開(kāi)辟新內(nèi)存空間,只要在源內(nèi)存基礎(chǔ)上修改數(shù)據(jù)。
包括: list(列表類(lèi)型) dict(字典類(lèi)型) set(集合類(lèi)型)。
比如: 下面以列表為例, 說(shuō)明列表是可變數(shù)據(jù)類(lèi)型。
從上面的圖示中可以看出, 對(duì)列表進(jìn)行操作, 添加數(shù)據(jù)300后, 前后并沒(méi)有重新開(kāi)辟內(nèi)存空間, 而是在原內(nèi)存基礎(chǔ)上添加的數(shù)據(jù), 所以 列表是可變數(shù)據(jù)類(lèi)型。
再比如: 以下是字典的圖示, 展示字典也是可變數(shù)據(jù)類(lèi)型。
從上面的圖示可以看出, 修改字典數(shù)據(jù)前后, 其中引用數(shù)據(jù)的地址, 并沒(méi)有發(fā)生改變, 并沒(méi)有開(kāi)辟新的內(nèi)存空間, 而是在原內(nèi)存基礎(chǔ)上修改的數(shù)據(jù), 因此字典是可變數(shù)據(jù)類(lèi)型。
再比如: 下邊的集合的使用, 說(shuō)明集合也是不可變數(shù)據(jù)類(lèi)型。
從上面的圖示可以查看出, 對(duì)集合中添加數(shù)據(jù)前后, 其集合變量的引用地址并沒(méi)有發(fā)生變化, 因此集合是可變數(shù)據(jù)類(lèi)型。
因此從上面的圖示得出結(jié)論,源內(nèi)存空間中的數(shù)據(jù)可以修改,不需要開(kāi)辟新內(nèi)存空間,只要在源內(nèi)存基礎(chǔ)上修改數(shù)據(jù), 這樣的數(shù)據(jù)類(lèi)型 就是可變數(shù)據(jù)類(lèi)型。
北京校區(qū)