看板 Python 關於我們 聯絡資訊
看書時遇到一個問題沒辦法解釋,想請教各位先進 class Kangaroo: def __init__(self, name, contents=[]): self.name = name self.pouch_contents = contents 為什麼這個類別在建立不同物件時,contents會參考到相同的串列? 我以為在每次建立物件時,各自物件的contents都會參考到一個新的串列 但事實上並不是,而書上提供的解法是: class Kangaroo: def __init__(self, name, contents=None): self.name = name if contents is None: contents = [] self.pouch_contents = contents 為什麼這邊的contents = []就可以建立新的串列物件? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.237.70.217 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1536063464.A.921.html
TuCH: 寫在函式外的[] 是全域的[] 寫在fun裡的是區域的[] 09/04 20:22
cryinrain: 原來如此,非常感謝!! 09/04 20:45
s860134: 引數列的預設引數在 class 被讀取時就建立了 09/05 12:23
nekosgr93: 預設值陷阱,不知道是不是這個 09/06 03:45
Yshuan: Mutable arguments, 行為類似c++的static local 09/06 09:10
ckc1ark: default值藏在 Kangaroo.__init__.__defaults__ 09/06 15:45
ckc1ark: 所以沒傳contents就會從這拿 就會是同一個 09/06 15:47