类行为中的奇数引用

时间:2014-11-28 08:17:25

标签: python class reference

使用Python 2.7,我们期望以下代码

class T(object):
    def __init__(self,x = list()):
        self.x = x
        self.x.append(0)
        print self.x

a = T()
b = T()

打印

  

[0]

     

[0]

然而,实际发生的是以下

  

[0]

     

[0,0]

我无法发现为什么会发生这种情况,以及如何防止这种行为。很明显,默认参数中的[]突然变成对类的所有实例共享的对象的引用......但为什么呢?怎么能阻止这个?

1 个答案:

答案 0 :(得分:1)

我认为你的意思是拿一份清单而不是对它的引用:

self.x = x[:]

最重要的是,您已经违反了默认参数的单个实例这一事实。然后你修改导致各种意外行为。处理这种情况的正常方法是这样的:

class T(object):
    def __init__(self, x = None):
        if x is None:
            x = []
        self.x = x[:]
        self.x.append(0)
        print self.x

如果您真的想要引用所提供的参数,那么您可以在上面用x[:]替换x