我得到了一个典型的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/