如果我在循环中调用函数而不是在循环外调用函数,什么会导致这种奇怪的内存泄漏?

问题描述 投票:0回答:1

我的脚本中目前有一些超级奇怪的行为。我正在迭代一个列表。我调用不同的函数来使用每个元素执行一些计算。像这样:

def foo(x):
    # some code

for element in elements:
    result = foo(element)

在某个时刻,循环停止,我的 VSCode 开始分配大量 RAM,直到它使我的电脑崩溃。我什至设法找出导致这次崩溃的因素。但我看不出有什么特别的地方。

如果我自己调用

foo(element_x)
,什么也不会发生?!它就像所有其他元素一样完美运行。

有什么想法可以从哪里来吗?抱歉,我没有有效的代码示例,因为我不知道从这里到哪里看。

python memory-leaks
1个回答
0
投票

预计:

for element in elements:
    result = foo(element)

将需要比

foo(element_x)
更多的时间/内存资源来计算,具体取决于可迭代中的值(即元素)。这是因为在第一种情况下,您将迭代 elements 中的每个元素,然后将每个元素传递给函数 foo。根据涉及的值,预计这可能会导致内存问题。

在第二种情况下,您只是将单个元素(即 element_x)传递给函数 foo ,因此可以理解,这应该比第一个示例更快并且消耗更少的资源。

同样,提供更多代码将帮助我们重现您的问题,但显然,循环整个可迭代并将每个元素传递给函数会比仅将一个元素传递给同一函数占用更多资源。

© www.soinside.com 2019 - 2024. All rights reserved.