如果我們在函式傳參時用這個預設引數並且在函式的內部對可變資料型別資料進行了「修改」,那麼這樣做是有問題的:如果多次呼叫同乙個函式,被當做引數的這個「可變資料型別」會一直用同乙個:
def func(name,lst=):(lst,id(lst))
func(1)
func(2)
func(3)
'''
結果:[1] 1920462303368
[1, 2] 1920462303368
[1, 2, 3] 1920462303368
'''
由上面的結果可以看出:func函式被呼叫了三次,每一次的結果「迭代」了。
參看下面的**:
def func(name,lst=):(lst,id(lst))
func(1,lst=[1])
func(2,lst=[2])
func(3,lst=[3])
'''結果:
[1, 1] 2639469556104
[2, 2] 2639469556104
[3, 3] 2639469556104
'''
可以看到:這樣每一次的結果不會「迭代了」;之所以id一樣,是因為每一次呼叫結束後python直譯器將原來的lst**掉,記憶體位址分配給了新的「列表」。
python 可變資料型別 不可變資料型別
在python中,資料型別分為可變資料型別和不可變資料型別,不可變資料型別包括string,int,float,tuple,可變資料型別包括list,dict。所謂的可變與不可變,舉例如下 a test print a 0 t a 0 1 traceback most recent call las...
python 可變資料型別 不可變資料型別
在python中,資料型別分為可變資料型別和不可變資料型別,不可變資料型別包括string,int,float,tuple,可變資料型別包括list,dict。所謂的可變與不可變,舉例如下 a test print a 0 t a 0 1 traceback most recent call las...
可變資料型別與不可變資料型別
可變資料型別 資料更改前後,記憶體id不變 列表,字典,集合 不可變資料型別 資料更改前後,記憶體id發生改變 數字 包括 整型,浮點型 字串,元組 分別對各種資料型別進行驗證 數字 int float 不可變資料型別 資料型別是不允許改變的,這就意味著如果改變量字資料型別的值,將重新分配記憶體空間...