[問題] 類別屬性參考到相同物件

看板Python作者 (啞貓)時間6年前 (2018/09/04 20:17), 編輯推噓3(305)
留言8則, 6人參與, 6年前最新討論串1/1
看書時遇到一個問題沒辦法解釋,想請教各位先進 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

09/04 20:22, 6年前 , 1F
寫在函式外的[] 是全域的[] 寫在fun裡的是區域的[]
09/04 20:22, 1F

09/04 20:45, 6年前 , 2F
原來如此,非常感謝!!
09/04 20:45, 2F

09/05 12:23, 6年前 , 3F
引數列的預設引數在 class 被讀取時就建立了
09/05 12:23, 3F

09/06 03:45, 6年前 , 4F

09/06 03:45, 6年前 , 5F
預設值陷阱,不知道是不是這個
09/06 03:45, 5F

09/06 09:10, 6年前 , 6F
Mutable arguments, 行為類似c++的static local
09/06 09:10, 6F

09/06 15:45, 6年前 , 7F
default值藏在 Kangaroo.__init__.__defaults__
09/06 15:45, 7F

09/06 15:47, 6年前 , 8F
所以沒傳contents就會從這拿 就會是同一個
09/06 15:47, 8F
文章代碼(AID): #1RZdVeaX (Python)
文章代碼(AID): #1RZdVeaX (Python)