【发布时间】:2023-03-05 18:01:01
【问题描述】:
我有这个代码:
import scipy
import scipy.linalg
def LU(A):
n = scipy.shape(A)[0]
U = A
L = scipy.identity(n)
for j in range(1,n):
for i in range(j+1,n+1):
L[i-1,j-1] = U[i-1,j-1]/U[j-1,j-1]
for k in range(j,n+1):
U[i-1,k-1] = U[i-1,k-1] - L[i-1,j-1] * U[j-1,k-1]
return L,U
a = scipy.matrix([[1.0,1.0],[2.0,1.0]])
L,U = LU(a)
print L
print U
print a
print scipy.dot(L,U)
我将如何修复 LU() 中不需要的通过引用传递,其中 U 指向 A 所在的位置,对 U 的更改也会更改 A。
【问题讨论】:
-
Python 总是通过引用传递。
-
引用传递和值传递的区别在于,值传递是复制整个对象。所以,复制对象。
-
您可以在通话中进行复制:
L, U = LU(copy.deepcopy(a)) -
@DanielRoseman 我不同意,我认为 python never 通过引用传递。但我承认,我对这些事情的理解可能是不正确的。据我了解,传递引用与传递引用不同,后者通常的特点是对调用者看到的变量进行赋值。 IE。
def special(&x): x = 4然后y = 3; special(y); print(y)将打印4