kmi*_*las 3 python linked-list python-3.x
[Python 3.8]
删除链表中的next节点时,是否可以简单地更改节点?
在这里,我们“删除”节点 1,只需更改指针即可。
来自 C++ 世界,这让我有点紧张。由于没有对节点 1 的引用,节点 1 的内存会自动回收吗?节点 1 到底发生了什么?
前
[Sentinel] -> [Node 0] -> [Node 1] -> [Node 2] -> [Node 3] -> None
Run Code Online (Sandbox Code Playgroud)
后
[Sentinel] -> [Node 0] -? [Node 1] -?-> [Node 2] -> [Node 3] -> None
?-----------?
Run Code Online (Sandbox Code Playgroud)
这是合法的吗?
最小的、完整的、可验证的例子
def delete(self, val):
n = self.sentinel
while n.next != None:
if n.next.data == val:
n.next = n.next.next # reassign pointer - no del, free, delete, or the like.
return
n = n.next
Run Code Online (Sandbox Code Playgroud)
在 CPython 中,垃圾收集的主要形式是通过引用计数。当一个对象的引用计数降为 0 时,该对象会立即自动回收。
Python 的其他实现通常不使用引用计数,但最终仍会自动回收垃圾。那么你只会失去“立即”的部分。
这是一件好事,因为无论你怎么看,你都不会在 Python 中找到任何可以强制释放内存的东西。特别是,del声明
del object
Run Code Online (Sandbox Code Playgroud)
并没有“删除”的对象。它只是删除当前名称的结合object,减少对对象的引用数object 为1。这可能会或可能不会让该对象的垃圾势必。
| 归档时间: |
|
| 查看次数: |
196 次 |
| 最近记录: |