Python:默认参数与本地值差异

时间:2014-12-03 15:45:32

标签: python python-2.7

以下是一些代码(Python 2.7):

class Test:
    @staticmethod
    def BuildSample():
        rootItem = Test('root')
        childA = Test('ChildA')
        rootItem.AppendChildren([childA])
        childA.AppendChildren([Test('Child' + str(i)) for i in range(3)])
        return rootItem     

    def __init__(self, name):
        self.name = name
        self.children = []

    def AppendChildren(self, items):
        self.children.extend(items)

    def GetChildren(self):
        return self.children

    def GetName(self):
        return self.name

sample = Test.BuildSample()
print 'sample.GetName() = ' + sample.GetName()
print 'sample.GetChildren() has ' + str(len(sample.GetChildren())) + ' children.'
print 'childA.GetName() = ' + sample.GetChildren()[0].GetName()
print 'childA.GetChildren() has ' + str(len(sample.GetChildren()[0].GetChildren())) + ' children.'

这是输出:

  

sample.GetName()= root
  sample.GetChildren()有1个孩子   childA.GetName()= ChildA
  childA.GetChildren()有3个孩子。

这是我所期待的。现在,如果我通过用这个版本替换构造函数来更改上面的代码:

def __init__(self, name, children=[]):
    self.name = name
    self.children = children

...我得到以下输出:

  

sample.GetName()= root
  sample.GetChildren()有4个孩子   childA.GetName()= ChildA
  childA.GetChildren()有4个孩子。

正在发生的事情是Child0,Child1和Child2项目被添加到根项目和childA项目的子项列表中。

我的问题是,为什么?当没有给出可选的children参数时,这两个方法之间的语义差异是什么?

0 个答案:

没有答案