gpt4 book ai didi

python - 如何在Python中将所有引用变量设置为None?

转载 作者:行者123 更新时间:2023-12-01 07:39:37 25 4
gpt4 key购买 nike

我有一个典型的 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 = Nonenode.next 仍然指向实例 next_node 并且不是 None .

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

如何在不显式将它们分配给 None 的情况下使所有引用变量(例如上述情况中的 node.next)变为 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com