python奇怪的内存泄漏问题

发布于 2022-09-06 13:19:05 字数 841 浏览 24 评论 0

一般来说函数里生成的对象在函数退出后应该被回收,可是python貌似并没有,必须得显示的调用gc.collect。这是为什么?以下是测试数据

测试环境: macOS High Sierra 10.13.2

empty_python.py

import time

if __name__ == '__main__':
    time.sleep(1000)

内存占用 2.7 MB

leak_python.py

import time
def garbage():
    task = {'action': 'test', 'args': [1,2]}


if __name__ == '__main__':
    for i in range(10000000):
        garbage()
    time.sleep(10000)

刚启动时内存 313.4MB 几秒钟后 237.3MB

gc_python.py

import time
def garbage():
    task = {'action': 'test', 'args': [1,2]}


if __name__ == '__main__':
    for i in range(10000000):
        garbage()
    time.sleep(20)
    import gc
    print gc.collect()
    time.sleep(10000)

刚启动时313.4MB 几秒后237.3MB collect()输出后 4.6MB

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

柠檬心 2022-09-13 13:19:05

你的编译器的问题?
OS 10.11.6 python2.7 python3.6均正常,内存无泄漏,你在终端里运行看看,我估计是你的编译器的问题

def garbage():
    task1 = {}
    task = {'action': 'test', 'args': task1}
    task1['args'] = task
    
# garbage写成这样才会出现314m内存,内存泄漏
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文