python - 如何删除Python中的旧引用?

标签 python object del

假设我有以下类(class)

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

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

Peter
Peter

最佳答案

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

改为在 __init__ 中初始化它:

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

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

关于python - 如何删除Python中的旧引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24412046/

相关文章:

python - 如何将列表的字符串表示形式转换为列表

python - 与 MATLAB 的 imgaussfilt 相比,为什么使用 skimage 和 scipy 的二维高斯滤波之间的速度差异如此之大?

java - 使用子对象解析 json 数组

python - 删除列表中的所有对象

python - __del__ 不可靠,但如果我尝试使用上下文管理器,对象不会持久存在

python - 将 PySpark RDD 作为新列添加到 pyspark.sql.dataframe

python - 如何在python中进行类别的加权随机样本

android - 如何将字符串从 Retrofit 转换为我的数据类模型中的自定义对象?

java - Java对象转换中的编译错误

python - 删除 *a : can't use starred expression here