可變數據類型:列表list和字典dict
不可變數據類型:整型int、浮點型float、字符串型string和元組tuple
python中的不可變數據類型,不允許變量的值發生變化,如果改變了變量的值,相當於是新建了一個對象,而對於相同的值的對象,在內存中則只有一個對象,內部會有一個引用計數來記錄有多少個變量引用這個對象;可變數據類型,允許變量的值發生變化,即如果對變量進行append、+=等這種操作后,只是改變了變量的值,而不會新建一個對象,變量引用的對象的地址也不會變化。
函數默認參數要用元組而非列表
定義函數的默認參數的時候,形如 def foo(attrs=(1,2)): return 之類。這里設定容器類型的默認參數 attrs 使用了元組而不用列表的原因在於:列表作為一種可變類型非常的不靠譜。當腳本執行到函數定義之處的時候,解釋器會對參數表達式做一次“預演算”,並把值保存到內存之中,之后每次調用這個函數的時候,都不會再重新運算其參數表達式,而是直接從“預演算”的結果處取值(引用)。所以如果你的默認參數寫了一個列表進去,那么每次你調用這個函數時對這個列表所做的更改都會被保存下來。就像這樣:
>>> def biggest(n, store=[0]): store[0] = max(n, store[0]) return store[0] >>> biggest(3) 3
>>> biggest(9) 9
>>> biggest(5) 9