我仍然是python的初学者,目前正在使用2.7版作为我想制作的一个小模块。你知道吗
它用于创建菜单(目前非常简单)
根据Daniel和delnan的答案更新:
每个菜单都是一个对象:
class UiNavMenu(object):
def __init__(self):
self.title = title
self.links = []
def add(self, title, link, **kwargs):
'''
Add a link to the menu by creating a UiNavLink object.
'''
link = UiNavLink(title, link, kwargs)
self.links.append(link)
def clear(self):
'''
Clear all links in the menu
'''
self.links = []
def __repr__(self):
return "<UInavmenu object> Menu '%s' : %s links" % (self.title, len(self.links))
这其实很基本。你知道吗
现在链接对象:
class UiNavLink(object):
def __init__(self, title, link, **kwargs):
self.title = title
self.link = link
for key, value in kwargs.items():
self.key = value
所以现在,我想知道的是:
首先,我知道python使用垃圾收集器,并且在进程的和处销毁一个对象。你知道吗
但是如果我使用如下菜单对象的clean()方法:菜单.清洁(),菜单将与他的所有内容一起被销毁。所以名单上(自我列表)也会被摧毁。你知道吗
但是列表中包含的links对象(UiNavLink对象)是否也会被销毁,这样我就不必处理它了? 还是要我手动处理?!你知道吗
非常感谢:)
亚恩
Python(或者更确切地说,默认的CPython实现)使用引用计数。当包含对另一个对象的引用的对象(或包含本身包含对某个对象的引用的列表)被删除或超出范围时,该对象的引用计数将减少。当对象的引用计数为0时,它将被垃圾收集。因此,如果您的列表是对这些对象的唯一引用,那么当它们的持有者是时,它们将被删除-但是如果其他变量也持有引用,它们将不会被删除。你知道吗
不过有几点。首先,你应该很少为此担心。Python内存管理是自动的,内存泄漏很难实现(尽管不是不可能)。你知道吗
其次,正如德尔南在评论中指出的,
__del__
绝对不是正确的方法。__del__
是由Python自动调用的(虽然不能保证只调用一次,或者根本不调用),而且定义它的事实比不定义它更可能导致内存泄漏。你知道吗相关问题 更多 >
编程相关推荐