學習python過程當中咱們必定會遇到不可變數據類型和可變數據類型。
1.名詞解釋python
如下全部的內容都是基於內存地址來講的。數組
總結:不可變數據類型更改後地址發生改變,可變數據類型更改地址不發生改變app
2.數據類型分類函數
在python中數據類型有:整型,字符串,元組,集合,列表,字典。接下來咱們用例子來一一查看他們分別屬於不可變數據類型仍是可變數據類型。學習
2.1 整型code
a = 1 print(id(a),type(a)) a = 2 print(id(a),type(a)) 1912499232 <class 'int'> 1912499264 <class 'int'>
咱們能夠發現,當數據發生改變後,變量的內存地址發生了改變,那麼整型就是不可變數據類型。blog
2.2 字符串圖片
b = 'djx' print(id(b),type(b)) b = 'djx1996' print(id(b),type(b)) 535056476344 <class 'str'> 535056476624 <class 'str'>
咱們能夠發現,當數據發生改變後,變量的內存地址發生了改變,那麼字符串就是不可變數據類型。內存
2.3 元組字符串
元組被稱爲只讀列表,即數據能夠被查詢,但不能被修改,可是咱們能夠在元組的元素中存放一個列表,經過更改列表的值來查看元組是屬於可變仍是不可變。
c1 = ['1','2'] c = (1,2,c1) print(c,id(c),type(c)) c1[1] = 'djx' print(c,id(c),type(c)) result: (1, 2, ['1', '2']) 386030735432 <class 'tuple'> (1, 2, ['1', 'djx']) 386030735432 <class 'tuple'>
咱們能夠發現,雖然元組數據發生改變,可是內存地址沒有發生了改變,可是咱們不能夠以此來斷定元組就是可變數據類型。
咱們回頭仔細想一想元組的定義就是不可變的。咱們修改了元組中列表的值,可是由於列表是可變數據類型,因此雖然在列表中更改了值,可是列表的地址沒有改變,列表在元組中的地址的值沒有改變,因此也就意味着元組沒有發生變化。
咱們就能夠認爲元組是不可變數據類型,由於元組是不可變的。
2.4 集合
集合咱們經常使用來進行去重和關係運算,集合是無序的。
s = {1,'d','34','1',1} print(s,type(s),id(s)) s.add('djx') print(s,type(s),id(s)) result: {'d', 1, '34', '1'} <class 'set'> 870405285032 {1, '34', 'djx', '1', 'd'} <class 'set'> 870405285032
咱們能夠發現,雖然集合數據發生改變,可是內存地址沒有發生了改變,那麼集合就是可變數據類型。
2.5 列表
列表是python中的基礎數據類型之一,其餘語言中也有相似於列表的數據類型,好比js中叫數組,它是以[]括起來,每一個元素以逗號隔開,並且它裏面能夠存放各類數據類型。
list = [1,'q','qwer',True] print(list,type(list),id(list)) list.append('djx') print(list,type(list),id(list)) result: [1, 'q', 'qwer', True] <class 'list'> 808140621128 [1, 'q', 'qwer', True, 'djx'] <class 'list'> 808140621128
咱們能夠發現,雖然列表數據發生改變,可是內存地址沒有發生了改變,那麼列表就是可變數據類型。
2.6 字典
字典是python中惟一的映射類型,採用鍵值對(key-value)的形式存儲數據。python對key進行哈希函數運算,根據計算的結果決定value的存儲地址,因此字典是無序存儲的。可是在3.6版本後,字典開始是有序的,這是新的版本特徵。
字典的key值能夠是整型,字符串,元組,可是不能夠是列表,集合,字典。
tuple = (1) dic = {1:2} d = { tuple:1,'key2':'djx','key3':'li'} print(d,type(d),id(d)) d['key4'] = 'haha' print(d,type(d),id(d)) result: {1: 1, 'key2': 'djx', 'key3': 'li'} <class 'dict'> 256310956320 {1: 1, 'key2': 'djx', 'key3': 'li', 'key4': 'haha'} <class 'dict'> 256310956320
咱們能夠發現,雖然字典數據發生改變,可是內存地址沒有發生了改變,那麼字典就是可變數據類型。