我怎样才能通过一个函数保存我的参数值,以便它可以使用它的初始值多次使用?

How can I preserve the value of my parameters through a function so it can be used multiple times with its initial value?

我刚刚开始使用 SAGE,据我所知,它非常接近 python,我遇到了这个问题,我将把一个矩阵作为函数的参数,我希望在具有相同原始功能的函数中多次使用,但通过函数的不同部分它会更改值。

我在教程中看到将函数中的变量声明为 variable = list(parameter) 不影响参数或括号中的任何内容。但是我无法让它工作.. 下面是我提出问题的程序的一部分(如有必要,我可以添加其余部分):我声明变量 determinant 其值是函数 my_Gauss_determinant 和变量 auxmmatrix 的结果作为参数。通过函数 my_Gauss_determinantauxmmatrix 的值发生了变化,但由于某种原因,mmatrix 的值也发生了变化。如何避免这种情况并能够以其原始值重新使用参数 mmatrix

def my_Cramer_solve(mmatrix,bb):
    auxmmatrix=list(mmatrix)
    determinant=my_Gauss_determinant(auxmmatrix)
    if determinant==0:
        print 
    k=len(auxmmatrix)
       solution=[]
        for l in range(k):
            auxmmatrix1=my_replace_column(list(mmatrix),l,bb)
            determinant1=my_Gauss_determinant(auxmmatrix1)
            solution.append(determinant1/determinant0)
    return  solution

您想要的是 mmatrix副本list(other_list) 起作用的原因是因为它遍历 other_list 中的每个项目以创建一个新列表。但是可变对象 within 列表没有被复制

>>> a = [{1,2}]
>>> b = list(a)
>>> b[0].add(7)
>>> a
[set([1,2,7])]

要制作完整的副本,您可以使用copy.deepcopy复制列表中的元素

>>> import copy
>>> a = [{1,2}]
>>> b = copy.deepcopy(a)
>>> b[0].add(7)
>>> a
[set([1,2])]

因此,如果您只想复制列表,但不想复制列表中的 元素,您可以这样做

auxmmatrix = copy.copy(matrix)
determinant = my_Gauss_determinant(copy.copy(matrix))

如果您还想复制列表中的元素,请使用copy.deepcopy

如果m是一个矩阵,你可以通过

将它复制到mm
sage: mm = m[:, :]

sage: mm = matrix(m)

要了解复制列表和矩阵等容器结构的必要性,您可以阅读 the tutorial on objects and classes in Python and Sage

other Sage tutorials也很推荐!