[问题] 类别属性参考到相同物件

楼主: cryinrain (哑猫)   2018-09-04 20:17:41
看书时遇到一个问题没办法解释,想请教各位先进
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 = []就可以建立新的串行物件?
作者: TuCH (谬客)   2018-09-04 20:22:00
写在函式外的[] 是全域的[] 写在fun里的是区域的[]
楼主: cryinrain (哑猫)   2018-09-04 20:45:00
原来如此,非常感谢!!
作者: s860134 (s860134)   2018-09-05 12:23:00
引数列的默认引数在 class 被读取时就建立了
作者: Yshuan (倚絃)   2018-09-06 09:10:00
Mutable arguments, 行为类似c++的static local
作者: ckc1ark (伪物)   2018-09-06 15:45:00
default值藏在 Kangaroo.__init__.__defaults__所以没传contents就会从这拿 就会是同一个

Links booklink

Contact Us: admin [ a t ] ucptt.com