Python变量类型之可变/不可变类型 数字类型: 字符串类型: 元组类型: 列表类型: 字典类型: 集合类型: 数据类型总结:
可变数据类型:值发生改变时,内存地址不变,即id不变,证明在改变原值
不可变类型:值发生改变时,内存地址也发生改变,即id也变,证明是没有在改变原值,是产生了新的值
#内存地址改变了,说明整形是不可变类型,浮点型也是一样
x=10 print(id(x)) x=20 print(id(x)) #执行结果 #140718135686256 #140718135686576
字符串类型:
#内存地址改变了,说明字符串是不可变类型
x="egon" print(id(x)) x="alex" print(id(x)) #执行结果 #1644635563096 #1644635563600
元组类型:
#元组是不可变类型
>>> t1 = ("tom","jack",[1,2]) >>> t1[0]='TOM' # 报错:TypeError >>> t1.append('lili') # 报错:TypeError # 元组内的元素无法修改,指的是元组内索引指向的内存地址不能被修改 >>> t1 = ("tom","jack",[1,2]) >>> id(t1[0]),id(t1[1]),id(t1[2]) (4327403152, 4327403072, 4327422472) >>> t1[2][0]=111 # 如果元组中存在可变类型,是可以修改,但是修改后的内存地址不变 >>> t1 ('tom', 'jack', [111, 2]) >>> id(t1[0]),id(t1[1]),id(t1[2]) # 查看id仍然不变 (4327403152, 4327403072, 4327422472)
列表类型:
# 对列表的值进行改变操作时,元素值本身发生变化,但是列表的内存地址不变,所以列表是可变数据类型
list1 = ['tom','jack','egon'] print(id(list1)) list1[2]="alex" print(list) print(id(list1)) list1.append("lili") print(id(list1)) # 执行结果 # 1995513094728 # ['tom', 'jack', 'alex'] # 1995513094728 # ['tom', 'jack', 'alex', 'lili'] # 1995513094728
字典类型:
#对字典进行操作时,元素值改变,但是字典本身id不变,所以字典是可变数据类型
dic = {'name':'egon','sex':'male','age':18} print(id(dic)) dic["age"]=19 print(dic) print(id(dic)) # 执行结果 # 2459917843336 # {'name': 'egon', 'sex': 'male', 'age': 19} # 2459917843336
集合类型:
#对集合进行操作时,元素值改变,但是集合本身id不变,所以集合是可变数据类型
data = {'tom','jack','egon'} print(id(data)) data.add("alex") print(data) print(id(data)) data.discard("tom") print(data) print(id(data)) # 执行结果 # 2246875583880 # {'alex', 'jack', 'tom', 'egon'} # 2246875583880 # {'alex', 'jack', 'egon'} # 2246875583880