為什麼python預設引數一定要指向不可變物件

2021-09-22 05:50:35 字數 478 閱讀 1747

python語言中,函式的預設引數必須指向不可變物件。

舉個簡單的例子:

def test(l=):

return l

print(test())

print(test())

print(test())

得到的結果是:

['a']

['a', 'a']

['a', 'a', 'a']

原因就在於函式的預設引數在函式定義時就已經被計算出來了,也就是l指向的記憶體位置已經確定,在呼叫test()函式改變了l的內容後,再次呼叫test(),預設引數l的內容就已經發生了變化。

如果想把預設引數設定為空列表,可以這麼做:

def test(l=none):

if l is none:

l =

return l

HashMap底層為什麼一定用陣列

hashmap原始碼資料結構 entry table new entry capacity 其中,entry就是乙個鍊錶節點。如果將陣列替換成linkedlist是否可行?如下 listtable new linkedlist 將陣列替換成linkedlist是可以的,但是hashmap選用陣列的原...

HashMap底層為什麼一定用陣列

hashmap原始碼資料結構 entry table new entry capacity 其中,entry就是乙個鍊錶節點。如果將陣列替換成linkedlist是否可行?如下 listtable new linkedlist 將陣列替換成linkedlist是可以的,但是hashmap選用陣列的原...

為什麼重寫就一定需要重寫HashCode方法

equals 和 hashcode方法是屬於object的,所以每個物件都有自己的equals 和 hashcode方法。在object中equals方法是用來判斷兩個物件是否是同乙個也就是他們的儲存位址是一樣的。但是往往我們有自己的需要定義equal,所以重寫equals方法很重要!下面來說說eq...