作者cryinrain (哑猫)
看板Python
标题[问题] 类别属性参考到相同物件
时间Tue Sep 4 20:17:41 2018
看书时遇到一个问题没办法解释,想请教各位先进
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://webptt.com/cn.aspx?n=bbs/Python/M.1536063464.A.921.html
1F:推 TuCH: 写在函式外的[] 是全域的[] 写在fun里的是区域的[] 09/04 20:22
2F:→ cryinrain: 原来如此,非常感谢!! 09/04 20:45
3F:→ s860134: 引数列的预设引数在 class 被读取时就建立了 09/05 12:23
5F:→ nekosgr93: 预设值陷阱,不知道是不是这个 09/06 03:45
6F:推 Yshuan: Mutable arguments, 行为类似c++的static local 09/06 09:10
7F:推 ckc1ark: default值藏在 Kangaroo.__init__.__defaults__ 09/06 15:45
8F:→ ckc1ark: 所以没传contents就会从这拿 就会是同一个 09/06 15:47