6. 可变不可变类型
一:可变不可变类型
可变类型:
- 值改变,id不变,证明改的是原值,证明原值是可以被改变的
不可变类型:
- 值改变,id也改变了,证明是产生新的值,压根没有改变原值,证明原值是不可改变的
二:验证
1. int是不可变类型
x = 10
print(id(x))
x = 20 # 产生新值
print(id(x))
1646651456
1646651616
2. float是不可变类型
x = 10.1
print(id(x))
x = 20.1
print(id(x))
21905056
21902576
3. str是不可变类型
x = 'xxq'
print(id(x))
x = 'zsy'
print(id(x))
59860800
59862464
小结:
- int、float、str在Python中都被设计成了不可分割的整体,不能够被改变
4. list是可变类型
-
列表本身的内存地址是不变的,但是列表里面的存的值的内存地址变了
-
改变的是元素地址(换汤不换药)
-
值改变,id(内存地址)不变
l = ['aaa','bbb','ccc']
print(id(l))
l = ['xxx','yyy','zzz']
print(id(l))
l = ['aaa','bbb','ccc']
print(id(l))
l[0] = 'AAA'
print(id(l))
5. dict是可变类型
- 值改变,id(内存地址)不变
dic = {'k1':111,"k2":222}
print(id(dic))
dic['k1'] = 333
print(id(dic))
字典补充:
定义:
- {}内用逗号隔开多个 key : value
- 其中 value可以是任意类型,但是 key必须是不可变类型
dic={
'k1':111,
'k2':3.1,
'k3':[333,],
'k4':{'name':'egon'}
}
dic={
2222:111,
3.3:3.1,
'k3':[333,],
'k4':{'name':'egon'}
}
print(dic[3.3])
dic={[1,2,3]:33333333} # 报错,key必须是不可变类型
dic={{'a.txt':1}:33333333} # 报错,key必须是不可变类型
6. bool不可变
True就是True
False就是False