可變類型和不可變類型的區別
1、可變類型,值可以改變:
list列表
dict字典
可變類型,添加或者修改數據時,變量對應的內存地址不會改變。也就是可變類型,一直在引用原來的內存地址。
注意,如果是重新賦值,內存地址就會發生改變。
而del 變量名 則只是刪除一個指針,不刪除變量。
2、不可變類型,值不可以改變:
數值類型int、long、bool、float
字符串str
元組tuple
不可變類型,一旦被重新賦值,變量對應的內存地址就會發生改變。
提示:
1. 不可變類型的數據作為實參傳遞, 修改形參不影響實參
2. 可變類型的數據作為實參傳遞, 修改形參會導致實參跟着變化。但是形參賦值不會改變實參。
代碼示例:
def selfAdd(a): ''' 自己增加 ''' a += a # 運算符改變參數的值 # a = a + a # 賦值改變參數的值。形參賦值,不會改變可變類型的實參。 if __name__ == '__main__': print("不可變類型") a_int=1 print(a_int) selfAdd(a_int) print(a_int) print("可變類型") a_list=[1,2] print(a_list) selfAdd(a_list) print(a_list)
輸出:
不可變類型
1
1
可變類型
[1, 2]
[1, 2, 1, 2]
延伸:
1 、id()
查看變量的內存地址。
id(c)
2 、引用計數
一個變量值,有多少個變量名綁定在上面,引用計數就為幾。
import sys
sys.getrefcount(a) #該命令本身也算一個引用。所以引用數會多1個
512以內的數字,不適用。