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