在Python中初始化关键字args

Dan*_*Dan 0 python arguments initialization instantiation

为什么如下:

class A(object):
    def __init__(self, var=[]):
        self._var = var
        print 'var = %s %s' % (var, id(var))

a1 = A()
a1._var.append('one')

a2 = A()
Run Code Online (Sandbox Code Playgroud)

造成:

var = [] 182897439952
var = ['one'] 182897439952
Run Code Online (Sandbox Code Playgroud)

我不明白为什么在使用可选关键字参数时它没有使用列表的新实例,有人能解释一下吗?

Ric*_*dle 6

在创建函数本身时,将创建一次函数定义中的空列表.每次调用函数时都不会创建它.

如果您每次都想要一个新的,请执行以下操作:

class A(object):
    def __init__(self, var=None):
        if var is None:
            var = []
        self._var = var
Run Code Online (Sandbox Code Playgroud)

  • 这不是一回事.例如,"1或[]"为1,但"0或[]"为[] (2认同)