当该数据类型对应的变量的值发生了变化时,如果它对应的内存地址不发生改变,那么这个数据类型就是可变数据类型。反之,则是不可变的数据类型。
- 直接记住可变数据类型:
list set dict
- 比较特殊的是元组
tuple
,它是不可变的数据类型
验证如下:
首先对list dict tuple set
进行定义
a=1
b=2
c=[a,b]
id_c=id(c)
print('列表地址:',id_c,' ',type(c))
d=(a,b)
id_d=id(d)
print('元组地址:',id_d,' ',type(d))
e={a:b}
id_e=id(e)
print('字典地址:',id_e,' ',type(e))
f={a,b}
id_f=id(f)
print('集合地址:',id_f,' ',type(f))
其结果如下:
列表地址: 1942788588800 <class 'list'>
元组地址: 1942790705344 <class 'tuple'>
字典地址: 1942788587776 <class 'dict'>
集合地址: 1942789774848 <class 'set'>
列表
我们可以对于列表c
进行增删操作,操作后结果如下:
c.append(d)
print(c)
print('列表地址是否改变:',id(c)!=id_c)
[1, 2, (1, 2)]
列表地址是否改变: False
可以看到,列表内元素增加后,列表的地址并没有改变。
元组
元组是不可变的数据类型,原则上不能改变其内部元素,除非其内部元素是列表等。
d2=d+(1,2)
print(d2)
print('元组地址是否改变',id(d2)!=id_d)
(1, 2, 1, 2)
元组地址是否改变 True
当内部元素使可变数据类型的情况,以列表为例。改变列表的元素,元组数据的地址不变。
list_1=[1,2]
tuple_1=(1,2,list_1)
print(tuple_1,' ',id(tuple_1))
list_1.pop()
print(tuple_1,' ',id(tuple_1))
(1, 2, [1, 2]) 1751706599808
(1, 2, [1]) 1751706599808
字典
需要注意的是:字典的key
不能是可变数据类型。
e[2]=3 #增加字典的元素
print(e)
print('字典地址是否改变',id(e)!=id_e)
{1: 2, 2: 3}
字典地址是否改变 False
集合
集合中不会有重复的元素出现。
f.add(3)
print(f)
print('集合地址是否改变',id(f)!=id_f)
{1, 2, 3}
集合地址是否改变 False