关于类:Python,可变对象作为默认参数,有什么方法可以解决?

Python, mutable object as default argument, is there any way to solve?

1
2
3
4
5
6
7
8
9
10
class A:
    def __init__(self, n=[0]):
        self.data = n

a = A()
print a.data[0] #print 0
a.data[0] +=1

b = A()
print a.data[0] #print 1, desired output is 0

在上面的例子中,有没有任何方法可以提供一个默认参数,其中的可变对象(如列表或类)在uuinit_uuuu()类A中,但B不受操作A的影响?


你可以试试这个:

1
2
3
4
5
class A:
   def __init__(self, n=None):
       if n is None:
         n = [0]
       self.data = n

这avoids面临的最大的问题是,"你,是的,这是每一个单一的对象相同的名单是你的"A"型


一个可能性是:

1
2
3
4
5
class A:
    def __init__(self, n=None):
        if n is None:
            n = [0]
        self.data = n


还有:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class A:
    def __init__(self, n=[0]):
        print id(n)
        self.data = n[:]
        print id(self.data)
        del n


a = A()
print a.data[0] #prints 0
a.data[0] +=1
print a.data[0] #prints 1

print

b = A()
print b.data[0] #prints desired output  0

这是一个原则的扩展列表。如果该列表是通过长的参数列表,将有两个长的内存中。这是操作系统的另一个inconvenience创建列表。这就是为什么我删除。

认为这是更好的,但它可能给你的理解所发生