可变类型与不可变类型的本质区别
当变量指向的值发生变化时,如果变量的地址发生变化,则该变量是不可变类型; 如果变量的地址没有发生变化,则该变量是可变类型
python中内置类型的可变性
数值: 不可变
字符串: 不可变
元组: 不可变
列表: 可变
字典: 可变
set: 可变
number = 3
id_1 = id(number)
number = 4
id_2 = id(number)
# type(number)=<class 'int'>,id_1 == id_2:False
print(f'type(number)={type(number)},id_1 == id_2:{id_1 == id_2}') # 不可变类型
string = 'str'
id_1 = id(string)
string = 'str1'
id_2 = id(string)
# type(string)=<class 'str'>,id_1 == id_2:False
print(f'type(string)={type(string)},id_1 == id_2:{id_1 == id_2}') # 不可变类型
# --------------------
# 以下为可变类型
# -------------------
tup = (1, 2, [3])
id_1 = id(tup)
tup[2].append(4)
id_2 = id(tup)
# type(tup)=<class 'tuple'>,id_1 == id_2:True
print(f'type(tup)={type(tup)},id_1 == id_2:{id_1 == id_2}') # 可变类型
li = [1, 2, 3]
id_1 = id(li)
li.append(4)
id_2 = id(li)
# type(li)=<class 'list'>,id_1 == id_2:True
print(f'type(li)={type(li)},id_1 == id_2:{id_1 == id_2}') # 可变类型
dic = {'name': 'zs'}
id_1 = id(dic)
dic['age'] = 18
id_2 = id(dic)
# type(dict)=<class 'list'>,id_1 == id_2:True
print(f'type(dict)={type(li)},id_1 == id_2:{id_1 == id_2}') # 可变类型
s = {1, 2, 3}
id_1 = id(s)
s.add(5)
id_2 = id(s)
# type(s)=<class 'set'>,id_1 == id_2:True
print(f'type(s)={type(s)},id_1 == id_2:{id_1 == id_2}') # 可变类型