看了一下網絡相關文章,還是決定自己寫一下,轉載必須註明出處。
一、名詞解釋
以下所有的內容都是基於內存地址來說的。
可變數據類型:變量引用的數據類型,在更改數值的時候,存在不開闢新內存 的行爲,此數據類型爲可變數據類型。
不可變數據類型 :變量引用的數據類型,在更改數值的時候,不存在不開闢新內存 的行爲,此數據類型爲不可變數據類型。
在 python 中,strings, tuples, 和 numbers 是不可更改的對象,而 list,dict 等則是可以修改的對象。根據結論,閱讀下面解析。
二、數據類型分析
1.數字
更改值,開闢新內存
代碼:
num = 1
print(id(num))
num = 2
print(id(num))
結果:
140706618831104
140706618831136
分析:下圖中紅色框代表裏面的內容不可更改
2.字符串
更改值,開闢新內存
代碼:
string = 'a'
print(id(string))
string = 'b'
print(id(string))
結果:
2793695685168
2793695653232
分析:
3.列表
更改值,不開闢新內存
代碼:
list = ['a','b','c','d','e','f','g']
print(id(list))
list[1] = 'w'
print(id(list))
print(list)
結果:
1490101031496
1490101031496
['a', 'w', 'c', 'd', 'e', 'f', 'g']
分析:
更改值,開闢新內存
代碼:
list = ['a','b','c','d','e','f','g']
print(id(list))
list = (1,2,3,4,5,6)
print(id(list))
結果:
2123071902280
2123073209064
分析:
4.元組
更改值,不開闢新內存 ——> 報錯,不能修改 ——> 假設不成立
代碼:
tup = ('a','b','c','d','e','f','g')
print(id(tup))
tup[1] = 'w'
print(id(tup))
print(tup)
結果:報錯
2210815038744
Traceback (most recent call last):
File "E:/pythonTest/test.py", line 3, in <module>
tup[1] = 'w'
TypeError: 'tuple' object does not support item assignment
分析:
更改值,開闢新內存
tup = ('a','b','c','d','e','f','g')
print(id(tup))
tup = (1,2,3,4,5,6)
print(id(tup))
結果:
2444846585112
2444846514920
分析:
5.字典
同“列表”,略
6.集合
同“列表”,略