python - python 中的迭代会消耗整个内存 - 错误代码?

标签 python memory sage

我在 Sage(一个用 python 编写的计算机代数系统,您可以在脚本中使用常规 python 语法)中编写了一些非常简单的试错代码。这个小代码片段创建了一个多项式并用系数做了一些计算,特别是它确定了系数中三个表达式生成的理想的 Groebner 基。

问题是:这个程序继续运行并耗尽我所有的内存,直到它被内核杀死。每次迭代仅消耗大约 200kB,但此内存永远不会再次释放。

这是代码。细节不是那么重要而且非常庞大,因此省略:

R = PolynomialRing(QQ, 2, 'bc', order='lex')
expr1, expr2, expr3 = ...

for i in range (0,50):
    for j in range(i+1,50):
        for k in range(j+1,50):
            for l in range(k+1,50):
                for m in range(l+1,50):
                    for n in range(m+1,50):
                        poly = (x-i)*(x-j)*(x-k)*(x-l)*(x-m)*(x-n)
                        r = poly.coeffs()

                        p1 = expr1.substitute(r...)
                        p2 = expr2.substitute(r...)
                        p3 = expr3.substitute(r...)

                        I = (p1, p2, p3)*R
                        B = I.groebner_basis()

据我了解 python 的内存管理,循环体中的变量每隔一段时间就会被释放。现在,它可能是编程问题、内部 python 问题或 Sage 例程中的某些问题。我不知道。您能发现我的代码有问题还是其他问题?

最佳答案

问题似乎不是你的循环(在 python2.7、OS-X 10.5.8 中):

a = 0
for i in range (0,50):
    for j in range(i+1,50):
        for k in range(j+1,50):
            for l in range(k+1,50):
                for m in range(l+1,50):
                    for n in range(m+1,50):
                        a += 1

print( a )

这在 python2.x 和 python3.x 上只需要很少的额外内存。

而且运行起来真的不需要那么长时间:

time python test.py
15890700

real   0m6.015s
user   0m5.940s
sys    0m0.032s

也许在使用 sage 运行时有些奇怪?或者可能是您循环中的其他原因导致了问题...

关于python - python 中的迭代会消耗整个内存 - 错误代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13257179/

相关文章:

python - 在 Python 中使用 Sage Math 库

python - 使用 Python 创建自定义语言

python - 如何对音高/ Octave 音程对进行排序

python - 在 PEP 3141 中,为什么 Number 没有 add 方法?

node.js - 是什么破坏了进程内存?

c++ - 使用 valgrind 在内存泄漏检测中抑制 "dl-hack3-cond-1"

python - "only length-1 arrays can be converted to Python scalars"在 Sage 中使用 scipy.optimize

python - 如何在Python类中动态定义方法?

python - 流式传输前 BigQuery 表截断不起作用

C++ 4 字节对齐数据