为什么sage将本地python变量视为全局变量?

时间:2014-03-10 00:23:58

标签: python function sage

圣人和蟒蛇的新手,所以我不确定我在滥用哪个。我正在尝试定义以下函数,该函数作用于输入列表A,但每次输入函数都会影响A的全局值。如何使其在本地运行?

def listxgcd( A ):
    g,s,t=xgcd(A.pop(0),A.pop(0))
    coeffs=[s,t]
    while a!=[]:
        g,s,t=xgcd(g,A.pop(0))
        coeffs=[s*i for i in coeffs]
        coeffs=coeffs+[t]
    return coeffs

我已尝试设置B=A并在任何地方替换B,但这不起作用,我不明白。我是否需要声明某种sage-y变量?

def listxgcd( a ):
    B=a
    g,s,t=xgcd(B.pop(0),B.pop(0))
    coeffs=[s,t]
    while B!=[]:
        g,s,t=xgcd(g,B.pop(0))
        coeffs=[s*i for i in coeffs]
        coeffs=coeffs+[t]
    return coeffs

非常感谢!

1 个答案:

答案 0 :(得分:1)

您正在将对容器对象的引用传递给listxgcd函数,该函数使用pop从该容器中检索元素。这不是范围问题,只是因为您直接在传递给函数的容器上操作。

如果您不希望该功能修改容器,请复制它:

import copy
def listxgcd( Ain ):
    A = copy(Ain)
    ...

或者更好的是,如果容器允许,则使用索引访问元素:

...
g,s,t=xgcd(A[0],A[1])
...
for i in range(2,len(A)):
    g,s,t=xgcd(g,A[i])
    ...