变量垃圾是否被收集?

Is the variable garbage collected or not?

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怎么还存在?

d,您真正指的是用作该参数默认值的 dict 对象。有一个对此 dict 的 "hidden" 引用,阻止它被垃圾收集。

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