Python 3.x 函数调用更改其参数python

Python 3.x 函数调用更改其参数python,python-3.x,function,function-calls,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):

我试图使用函数将矩阵简化为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.18.7][2.44.1]][9.48 4.48]

输出:[[5.10000000e+00 8.70000000e+00] [0.00000000e+005.88235294e-03][9.480.01882353]


在python中,每个变量都引用一个对象。它指的是对象指针,因此它使用的是对象本身。
在该函数中,您引用
E
like
E[j,k]
r
like
r[j]
并分配给它,这意味着您正在使用同一对象,也意味着您正在操作它。
尝试在函数的第一步使用
copy
来自copy import copy

X = GaussE(A[:],b[:])
print(A,b) # Why is A and b changing? they should not change
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)