不同的变量在内存中有不同的存储空间,每个存储空间都有一个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