是否收集了变量垃圾?

时间:2015-10-23 13:57:16

标签: python garbage-collection

class X:
    def __init__(self, d={}):
        self.x = []
        d['any'] = self.x

    def append(self, i):
        self.x.append(i)

x = X()
x.append(3)
x.append(13)
x.append(123213)
print(x.x)  # show [3, 13, 123213]

问题是,d会发生什么?是垃圾收集?如果是,x如何仍然存在?

1 个答案:

答案 0 :(得分:3)

d,您的意思是dict对象作为该参数的默认值。对此dict有一个“隐藏”引用,可以防止它被垃圾回收。

>>> print x.__init__.__defaults__
({'any': [3, 13, 123213]},)