在python中使用del语句后无法删除对象 [英] Unable to remove object after using del statement in python

查看:414
本文介绍了在python中使用del语句后无法删除对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

  class BinaryNode:
def __init __(self,value):
self.data =值
self.left =无
self .right = None

def contains(root,value):
如果root为None:
返回False

如果value == root.data :
返回true

如果值< root.data:
return contains(root.left,value)
else:
return contains(root.right,value)


def插入(root,value):
如果root为None:
root = BinaryNode(value)
else:
如果value> root.data:
如果root.right为None:
root.right = BinaryNode(value)
else:
return insert(root.right,value)
否则:
如果root.left为None:
root.left = BinaryNode(value)
否则:
return insert(root.left,value)

def getMin(root):
如果root.left为None:
返回根
返回getMin(root.left)

def remove(root,value ):如果root为None,则

返回False
elif值< root.data:
remove(root.left,value)
elif value> root.data:
remove(root.right,value)
else:
如果root.left为None且root.right为None:
del root



def顺序(root):
如果root不存在:
顺序(root.left)
print(root.data)
inorder(root.right)


b = BinaryNode(10)
insert(b,9)
insert(b,11)
insert( b,8)
插入(b,9.5)

删除(b,9.5)
有序(b)
解决方案

del 仅删除引用,此处为本地名称 root 。它不会删除您顶部的 b 引用。您无法使用函数来完成您想做的事情;函数不拥有调用方中的引用。



最多可以将 root 值包装在单独的 BinaryTree 类实例,可以为空。为它提供 root 属性,如果该属性设置为 None ,则清除树。


class BinaryNode:
    def __init__(self, value):
        self.data = value
        self.left = None
        self.right = None

def contains(root, value):
    if root is None:
        return False

    if value == root.data:
        return True

    if value < root.data:
        return contains(root.left, value)
    else:
        return contains(root.right, value)


def insert(root, value):
    if root is None:
        root = BinaryNode(value)
    else:
        if value > root.data:
            if root.right is None:
                root.right = BinaryNode(value)
            else:
                return insert(root.right, value)
        else:
            if root.left is None:
                root.left = BinaryNode(value)
            else:
                return insert(root.left, value)

def getMin(root):
    if root.left is None:
        return root
    return getMin(root.left)

def remove(root, value):
    if root is None:
        return False
    elif value < root.data:
        remove(root.left, value)
    elif value > root.data:
        remove(root.right, value)
    else:
        if root.left is None and root.right is None:
            del root



def inorder(root):
    if root is not None:
        inorder(root.left)
        print(root.data)
        inorder(root.right)


b = BinaryNode(10)
insert(b, 9)
insert(b, 11)
insert(b,8)
insert(b,9.5)

remove(b, 9.5)
inorder(b)

i'm constructing the functions of a binary search tree. So far, in writing my remove function I handle the case in which the root to be removed from the tree is a left node (node without any children). For this, all I would have to do say del root. This has no effect at all on the tree and the value 9.5 still exists.

解决方案

del only removes the reference, here the local name root. It won't delete the b reference you have at the top. You can't do what you want with a function; a function doesn't own the references in the caller.

At most you can wrap your root value in a separate BinaryTree class instance, than can be 'empty'. Give it a root attribute and if that attribute is set to None the tree is cleared.

这篇关于在python中使用del语句后无法删除对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆