如何通过函数保留参数的值,以便可以多次使用其初始值?

时间:2016-04-11 18:36:40

标签: python sage

我刚刚开始使用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

1 个答案:

答案 0 :(得分:1)

您想要的是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