是否有必要在python中的一个大变量使用后立即删除它?

xienkqul  于 2022-12-10  发布在  Python
关注(0)|答案(2)|浏览(271)

如果我创建了一个1GB的列表,把它打印到屏幕上,然后删除它,它也会从内存中删除吗?这种删除本质上会像释放内存一样吗?比如C中的free()。
如果一个变量非常大,我应该在使用后立即删除它,还是应该让Python的垃圾收集器来处理它?

# E.g. creating and deleting a large list

largeList = ['data', 'etc', 'etc'] # Continues to 1 GB
print largeList
largeList = []   # Or would it need to be:  del largeList [:]
mrphzbgm

mrphzbgm1#

大多数时候,你不应该担心垃圾收集语言中的内存管理,这意味着删除变量(在python中),或者手动调用垃圾收集器(GC)。
你应该相信GC会正确地完成它的工作--大多数时候,对内存进行微观管理会导致负面的结果,因为GC比你拥有更多关于内存使用和需要的信息和统计数据。而且,垃圾收集是一个开销很大的过程(CPU方面),所以你很有可能会过于频繁地/在一个糟糕的时刻调用它。
在你的例子中发生的是,只要ou largeList = [],之前引用的内存内容将被GC 'd只要它方便,或内存是需要的.
您可以使用解释器和内存监视器来检查这一点:

#5 MiB used
>>> l1=[0]*1024*1024*32
#261 MiB used
>>> l2=[0]*1024*1024*32
#525 MiB used
>>> l1=[0]*1024*1024*32
# 525 MiB used

在 * 非常罕见 * 的情况下,您 * 确实 * 需要手动管理内存,并且您关闭了垃圾收集。当然,这可能会导致内存泄漏错误such as this one。值得一提的是,现代的python GC可以正确处理循环引用。

s4n0splo

s4n0splo2#

使用“die”---〉Deletion of a name会从本地或全局名称空间中删除该名称的绑定。它确实释放了内存,但并不是所有内存都被释放。
注:当进程从HEAP释放一些内存时,只有在进程终止后,它才会释放回操作系统。
所以,最好把它留给垃圾收集器。

相关问题