不同的變量在內存中有不同的存儲空間,每個存儲空間都有一個ID
>>> a = 32 >>> id(a) # 查看ID 1571185856 >>> b = a >>> id(b) 1571185856
聲明一個變量a,再把a的值賦值給b,得到a,b兩個變量,但是ID相同,即指向同一個內存地址,就像以前的人起名字,名、字、號。
那么對b重新賦值呢
>>> b = 33 >>> id(b) 1571185888 >>> id(a) 1571185856
a還是原來的ID,但是b變了。他把名字改了,但是另外一個人恰好又起了這個名字。這兩個名字指的就是兩個人了。
下面進入正題,什么是可變數據類型呢?變量的值改變但是ID不變,反之則是不可變數據類型
可變數據類型:列表、字典、集合

>>> name_list = ['alex', 'mary'] >>> id(name_list) 2463315069192 >>> name_list[0] = ['eric'] >>> id(name_list) 2463315069192 >>> name_list.append('jake') >>> name_list [['eric'], 'mary', 'jake'] >>> id(name_list) 2463315069192

>>> person = {'name': 'alex', 'age': 24} >>> id(person) 2463314404192 >>> person['gender'] = 0 >>> person {'name': 'alex', 'age': 24, 'gender': 0} >>> id(person) 2463314404192
不可變數據類型是不可修改的,硬要改的話只能是重新賦值。

>>> name = 'jake' >>> id(name) 2463315000432 >>> name.replace('e', 'ie') 'jakie' >>> id(name) 2463315000432 # id沒變 >>> name 'jake' >>> name = name.replace('e', 'ie') >>> id(name) 2463314429184 #重新賦值,ID變化,name也變 >>> name 'jakie'
元組和列表類似,有索引,如果像改列表一樣嘗試修改元組的話直接報錯

>>> name_tuple = ('alex', 'maria') >>> id(name_tuple) 2463314574664 >>> name_tuple[0] 'alex' >>> name_tuple[0] = 'a' Traceback (most recent call last): File "<pyshell#39>", line 1, in <module> name_tuple[0] = 'a' TypeError: 'tuple' object does not support item assignment
hash:不可變數據類型才能被hash