可變類型與不可變類型的本質(zhì)區(qū)別
當(dāng)變量指向的值發(fā)生變化時(shí),如果變量的地址發(fā)生變化,則該變量是不可變類型; 如果變量的地址沒有發(fā)生變化,則該變量是可變類型
python中內(nèi)置類型的可變性
數(shù)值
: 不可變
字符串
: 不可變
元組
: 不可變
列表
: 可變
字典
: 可變
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}') # 可變類型