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