gpt4 book ai didi

python - 究竟什么时候覆盖的变量会被垃圾回收?

转载 作者:太空宇宙 更新时间:2023-11-04 04:02:10 26 4
gpt4 key购买 nike

在某些迭代任务中覆盖变量时,变量究竟何时被垃圾收集?例如,假设我们有一个内存密集型函数,some_function()。此函数还返回一个大对象 data

def some_function(x):
...
return data

如果在某些迭代任务期间调用此函数,例如

for x in some_iterable:
output = some_function(x)

新变量 output 是否会在 some_function() 被调用时立即被垃圾回收?还是仅在返回新值时才释放内存?我只关心内核中释放的内存,不一定在系统中(所以我可能错误地使用了垃圾收集一词)。

最佳答案

当数据不再可用时,Python 垃圾收集器会在后台将内存标记为可用于后续分配。但是,相对于内核,它不会被释放。

如果您关心的是内核何时将物理内存提供给其他进程使用,那是另一回事:内存仍然虚拟地映射到您的 Python 进程的地址空间,因此为了使该物理内存成为由内核释放,要么你的 Python 进程必须退出(从而释放分配给它的所有物理内存),要么以前保存你的数据的物理内存需要变成最近最少使用虚拟内存策略。如果没有其他进程竞争它(可能在数 GB 的系统中),那可能需要很长时间。如果有其他进程竞争物理内存,则可能会在几秒或几分钟内发生。此外,如果您的 Python 进程分配了更多数据,突然间这些页面最近再次被使用,因此成为物理回收的最后一行。但是,如果您的物理内存不足,则您的系统可能存在其他问题。

关于python - 究竟什么时候覆盖的变量会被垃圾回收?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58053231/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com