You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

频繁返回Python集合致内存占用过高,如何释放内存?

集合返回函数的内存占用与释放问题

我有一个返回集合的函数,频繁调用它会导致内存占用过高。删除存储返回集合的列表后,内存并未得到释放;而当函数返回列表时,内存消耗低得多,且删除存储返回列表的列表后内存会被释放。

测试代码

import sys
large_list = list(range(2_000_000))

def some_function(arg1, arg2=None):
        # return list(range(23)) # --> 内存占用: ~650 MB
        return set(list(range(23))) # --> 内存占用: ~4 GB

results = []
for x in large_list:
    results.append(some_function(x))
print(f"size results: {sys.getsizeof(results)/1000/1000} MB")
# >>> size results: 17.12828 MB

del results # 使用集合时,此操作不会降低进程内存

删除results后再次执行for循环,内存占用并未升至~8GB,可见集合占用的内存似乎会被复用。

如果必须使用集合,我该如何释放内存?我的Python程序曾因内存不足崩溃。

我使用的是Linux系统(Rocky 9.2),通过btop查看进程内存占用。


编辑补充

  • @Ashwini Chaudhari:单独执行del语句时,我能立即看到内存下降(无需显式调用垃圾回收器),但那部分约4GB的大内存块并未释放。
  • @Klaus D.:这只是示例,实际中some_function会进行一些计算后返回集合,我遇到内存问题后将该问题单独隔离出来。
  • @testfile:但我将函数返回的列表添加到一个列表中时,使用集合时该列表并未占用全部内存,且列表的id也各不相同:

补充测试代码

def some_function(arg1, arg2=None):
        return list(range(23)) # --> 内存占用: ~650 MB

results = []
for x in range(2):
    results.append(some_function(x))

print(f"id r: {id(results)}")
print(f"id r[0]: {id(results[0])}")
print(f"id r[1]: {id(results[1])}")

输出结果

id r: 140151027880896
id r[0]: 140151027733120
id r[1]: 140151027735040
  • 编辑2:查看我的回答。
  • 编辑3:已将编辑2发布为回答。

内容的提问来源于stack exchange,提问作者s-homberg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 06:47:41