我得到了一个典型的ListNode类,如下所示,

class ListNode:
    def __init__(self,val, next = None):
        self.val = val
        self.next = next


我创建了该类的两个实例,并将其中一个对象分配给第一个实例中称为next的变量,如下所示,

node = ListNode(1)
next_node = ListNode(2)
node.next = next_node


但是,如果我分配nnode = None,则node.next仍指向实例next_node,而不是None

print( next_node == node.next) # Prints True
next_node = None
print( node.next.val) # Prints 1


我如何才能使所有参考变量(例如上述情况下的node.next)都设置为None而不将其明确分配给None?

最佳答案

我真的很喜欢你的问题。可能这并不是您要找的东西,但是我发现了weakref库。有了它,您可以尝试修改您的代码:

class ListNode:
    def __init__(self, val, next_=None):
        self.val = val
        self.next_ = next_

    def get_next(self):
        try:
            self.next_.check()
        except AttributeError: # if self.next_ exists then it does not have 'check' method.
            return self.next_
        except ReferenceError: # if it does not exists it will raise this exception
            return None


然后,您可以创建weakref而不是分配node.next_ = next_node

node = ListNode(1)
next_node = ListNode(2)
node.next_ = weakref.proxy(next_node)

print( next_node == node.next_) # prints True
next_node = None
print(node.get_next()) # prints None


希望这会帮助您解决问题!

编辑:
我也将名称next更改为next_,因为next是内置函数

关于python - 如何在Python中将所有引用变量设为None?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56797591/

10-11 19:33