如何删除Python中的旧引用?

ilc*_*avo 2 python object del

假设我有以下课程

class Daddy:
    children=[]

    def addChild(self,aChild):
        self.children.append(aChild)

class Child:
    name = ''
    def __init__(self, aName):
        self.name = aName

aChild = Child('Peter')
aDaddy = Daddy()
aDaddy.addChild(aChild)
print aDaddy.children[0].name
del(aDaddy)
anotherDaddy = Daddy()
print anotherDaddy.children[0].name
Run Code Online (Sandbox Code Playgroud)

Daddy()保持对对象aDaddy的引用,我得到以下输出:

Peter
Peter
Run Code Online (Sandbox Code Playgroud)

Col*_*Two 5

children是一个类变量(类似于其他语言中的静态变量),因此它在所有实例中共享Daddy(与name变量in 相同Child).

__init__改为初始化:

class Daddy:
    def __init__(self):
        self.children = []

    def addChild(self,aChild):
        self.children.append(aChild)
Run Code Online (Sandbox Code Playgroud)