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

数据类型总结:

原文地址:https://www.cnblogs.com/baicai37/p/12426138.html