函数调用改变它的参数python

时间:2017-09-21 04:27:21

标签: python-3.x function function-calls

我正在尝试使用函数将矩阵缩减为其echlon形式,但在调用函数时,它也会更改其参数。这是代码

def GaussE(E,r):
    N = np.size(r)
    for i in range(0,N-1):
        for j in range(i+1,N):
            f=(E[j,i]/E[i,i])
            r[j]= r[j] -(f)*r[i]             
            for k in range(i,N):                          
                E[j,k] = E[j,k]-(f*E[i,k])  
    return(E,r)
A = np.array([[5.10,8.70],[2.40,4.10]])
b = np.array([9.48,4.48])
print(A,b)
  

输出:[[5.1 8.7] [2.4 4.1]] [9.48 4.48]

X = GaussE(A[:],b[:])
print(A,b) # Why is A and b changing? they should not change
  

输出:[[5.10000000e + 00 8.70000000e + 00]    [0.00000000e + 00 5.88235294e-03]] [9.48 0.01882353]

1 个答案:

答案 0 :(得分:0)

在python中,每个变量都引用一个对象。它引用了对象指针,因此它正在使用对象本身 在该功能中,您引用了E E[j,k]r,如r[j]并指定它,这意味着您正在使用相同的对象并且意味着你在操纵它。
尝试在您的第一个函数copy

中使用from copy import copy
from copy import copy

def GaussE(E,r):
    E = copy(E)
    r = copy(r)
    N = np.size(r)
    for i in range(0,N-1):
        for j in range(i+1,N):
            f=(E[j,i]/E[i,i])
            r[j]= r[j] -(f)*r[i]             
            for k in range(i,N):                          
                E[j,k] = E[j,k]-(f*E[i,k])  
    return(E,r)
A = np.array([[5.10,8.70],[2.40,4.10]])
b = np.array([9.48,4.48])
print(A,b)