在python中使用大对象时,我应该删除它们吗?

2024-10-02 02:29:59 发布

您现在位置:Python中文网/ 问答频道 /正文

假设脚本中没有任何特定的内存优化问题,所以我的问题是关于Python编码风格的。这也意味着:尽可能快地取消对对象的引用是一种好的、常见的python实践吗?场景如下。在

Class A将一个对象实例化为self.foo,并请求第二个class B来存储并与其他对象共享。 在某个时刻,A决定不再共享{},并将其从{}中删除。在

Class A仍然有对foo的引用,但是我们知道从现在起这个对象是无用的。 由于foo是一个相对较大的对象,您会费心从a中删除引用吗?如何删除?(例如delvs设置self.foo = None这个决定如何影响垃圾收集器?


Tags: 对象实例内存self脚本none编码foo
3条回答

到目前为止,根据我使用Python的经验,我在垃圾收集方面还没有遇到任何问题。但是,我确实采取了预防措施,这不仅是因为我不想处理任何未引用的对象,而且也是出于组织的原因。在

具体回答您的问题:

1)是的,我建议删除该对象。这将防止代码变得笨重和/或缓慢。如果您的代码运行时间很长,那么这是一个特别好的决定,即使Python在垃圾收集方面非常出色。在

2)无论哪种方式都很好,尽管我使用del只是为了删除实际的引用本身。在

3)我不知道它是如何“影响垃圾收集者”,但安全总比后悔好。在

如果在删除属性之后,访问属性并查看它是否设置的概念甚至没有意义,请使用del。如果在删除该属性后,程序中的某些内容可能需要检查该空间并查看是否有任何内容,请使用= None。在

垃圾收集者不会在意这两种情况。在

del Blah

将使Blah的引用计数减少一个。。。一旦不再有引用,python将对其进行垃圾回收

^{pr2}$

也将使Blah的引用计数减少一个。。。一旦不再有引用,python将对其进行垃圾回收

这两种方法都没有强制销毁对象。。。只有一个参考

在* 一般来说,我会避免使用del,因为它会破坏名称,并可能在代码中导致其他错误,如果您在之后尝试引用它。。。

在cPython(“普通”python)中,这种垃圾回收非常有规律

相关问题 更多 >

    热门问题