Мой вопрос: будет ли объект узел(3) все еще находиться в оперативной памяти, когда мы достигнем конца функции Удалить()? Если нет, то когда он будет удален из оперативной памяти?
class Node:
def __init__(self, data):
self.data = data
self.next = None
class LinkedList:
def __init__(self):
self.head = None
def add(self, data):
if self.head is None:
self.head = Node(data)
else:
curr_node = self.head
while (curr_node.next):
curr_node = curr_node.next
curr_node.next = Node(data)
def remove(self, data):
if self.head is not None:
if self.head.data == data:
self.head = self.head.next
else:
curr_node = self.head
while curr_node.next is not None:
if curr_node.next.data == data:
curr_node.next = curr_node.next.next
break
curr_node = curr_node.next
l = LinkedList()
l.add(2)
l.add(3)
l.add(4)
l.remove(3)
# program going on ...
Обратите внимание, что причина, по которой ваша ОС может не освободить его немедленно, заключается в том, что для его удаления требуются ресурсы, но, как правило, это происходит почти мгновенно. Обычно вам не нужно беспокоиться о gc.
Точное поведение сборки мусора зависит от реализации Python. CPython ведет себя в подобных ситуациях совершенно иначе, чем, например, PyPy или Jython.






После
remove(3)узел кажется недостижимым (если нет другой ссылки на него где-то еще). Если объект недоступен, он будет освобожден в какой-то неопределенное время в будущем или вообще не будет освобожден (если процесс завершается, ОС освобождает память). Спецификация Python не является более точной. Вызовgc.collect()обычно немедленно освобождает недоступные объекты.