我刚刚开始使用 SAGE,据我所知,它非常接近 python,我遇到了这个问题,我将一个矩阵作为函数的参数,我希望在函数中多次使用它具有相同的原始功能,但通过功能的不同部分,它会改变值。
我在教程中看到将函数中的变量声明为
variable = list(parameter)
不影响参数或括号中的任何内容。但是我无法让它工作..
下面是我提出问题的程序的一部分(如有必要,我可以添加其余部分):我声明了变量 determinant
,它的值是函数 my_Gauss_determinant
的结果,其中变量 auxmmatrix
作为参数。通过函数 my_Gauss_determinant
auxmmatrix
的值发生了变化,但由于某种原因 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
中的每个项目以创建一个新列表。但是在
列表中的可变对象不会被复制
>>> 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
关于python - 我怎样才能通过一个函数保存我的参数值,以便它可以使用它的初始值多次使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36556576/