【发布时间】:2013-12-09 15:09:07
【问题描述】:
我想知道为什么以下不起作用。
class Node(object):
def __init__(self, data, next=None):
self.data = data
self.next = next
def remove(self, value):
if self is None:
return False
if self.data == value:
if self.next:
self.data = self.next.data
self.next = self.next.next
else:
del self
else:
self.next.remove(value)
node = Node(4)
node.append(Node(3))
node.remove(3)
print node.next.data
#prints 3
del 不会从链表中删除元素。我必须修改 delete() 函数,以便我有一个指向目标元素父级的指针。
class Node(object):
def __init__(self, data, next=None):
self.data = data
self.next = next
def remove(self, value):
if self is None:
return False
if self.data == value:
if self.next:
self.data = self.next.data
self.next = self.next.next
else:
del self
else:
current = self
while current.next:
if current.next.data == value:
if current.next.next:
current.next = current.next.next
else:
current.next = None
从控制台,
node = Node(4)
current = node
del current #node is not deleted because I am only deleting the pointer
del node #node is deleted
这对我来说似乎是合乎逻辑的。但是,我不确定为什么第一个代码块没有按预期工作。
【问题讨论】:
-
查看此特定问题的最佳解决方案可能会有所帮助。
-
Python 中的变量只是事物的名称。
del从对象中删除名称;这并不意味着“破坏对象”。我建议创建一个List类来管理节点;如果您直接存储Nodes,您将无法在第一个节点中删除该东西,而没有尴尬的解决方法。 -
@user2357112 请将其作为答案发布 - 否则我们应该将其作为重复项关闭。
标签: python garbage-collection destroy reference-counting del