假设脚本中没有任何特定的内存优化问题,所以我的问题是关于Python编码风格的。这也意味着:尽可能快地取消对对象的引用是一种好的、常见的python实践吗?场景如下。在
Class A
将一个对象实例化为self.foo
,并请求第二个class B
来存储并与其他对象共享。
在某个时刻,A
决定不再共享{
Class A
仍然有对foo的引用,但是我们知道从现在起这个对象是无用的。
由于foo是一个相对较大的对象,您会费心从a中删除引用吗?如何删除?(例如del
vs设置self.foo = None
)这个决定如何影响垃圾收集器?
到目前为止,根据我使用Python的经验,我在垃圾收集方面还没有遇到任何问题。但是,我确实采取了预防措施,这不仅是因为我不想处理任何未引用的对象,而且也是出于组织的原因。在
具体回答您的问题:
1)是的,我建议删除该对象。这将防止代码变得笨重和/或缓慢。如果您的代码运行时间很长,那么这是一个特别好的决定,即使Python在垃圾收集方面非常出色。在
2)无论哪种方式都很好,尽管我使用
del
只是为了删除实际的引用本身。在3)我不知道它是如何“影响垃圾收集者”,但安全总比后悔好。在
如果在删除属性之后,访问属性并查看它是否设置的概念甚至没有意义,请使用
del
。如果在删除该属性后,程序中的某些内容可能需要检查该空间并查看是否有任何内容,请使用= None
。在垃圾收集者不会在意这两种情况。在
将使Blah的引用计数减少一个。。。一旦不再有引用,python将对其进行垃圾回收
^{pr2}$也将使Blah的引用计数减少一个。。。一旦不再有引用,python将对其进行垃圾回收
这两种方法都没有强制销毁对象。。。只有一个参考
在* 一般来说,我会避免使用
del
,因为它会破坏名称,并可能在代码中导致其他错误,如果您在之后尝试引用它。。。在cPython(“普通”python)中,这种垃圾回收非常有规律
相关问题 更多 >
编程相关推荐