LU.py라는 파일에 정의 된 함수 (crout)와 다른 파일에 정의 된 다른 함수 (invert.py)가 있습니다. 파일의 내용은 다음과 같습니다python 함수가 요청하지 않은 변경을합니다.
LU.py
def crout(A,L,U):
N = len(A)
add = 0
#print(L,U)
for i in range(N):
print('b',L[i][i])
U[i][i] = 1
print('a',L[i][i])
#print(L,U)
내가 역에서 한 번, 반전 파일에서 함수 crout 두 번 실행
import LU
def inverse(A):
n = len(A)
B = []
L = []
U = []
for i in range(n):
row = [0 for j in range(n)]
B.append(row)
L.append(row)
U.append(row)
LU.crout(A,L,U)
return B
M = [[1,2,3],[1,0,1],[2,2,0]]
Mi = inverse(M)
A = [[1,2,3],[1,0,1],[2,2,0]]
L = [[0,0,0],[0,0,0],[0,0,0]]
U = [[0,0,0],[0,0,0],[0,0,0]]
print('bla')
LU.crout(A,L,U)
공지 사항을 invert.py 함수 밖에서 한 번. 다음으로, 나는 우분투 리눅스 시스템에서 파이썬 2.7.6를 사용하여 invert.py 파일을 실행하고 나는 다음과 같은 출력을 얻을 :
역 내에서 crout의 통화 인 '즐'이전('b',0)
('a',1)
('b',0)
('a',1)
('b',0)
('a',1)
bla
('b',0)
('a',0)
('b',0)
('a',0)
('b',0)
('a',0)
숫자를 배열 L에서 대각선의 요소를 나타냅니다. U의 값을 변경하면 이러한 값이 0 ('b')에서 1 ('a')로 변경됩니다. 반면에 함수 역함 밖에서 crout을 호출하면 U를 변경 한 후에 L 값이 변경되지 않고 그대로 유지됩니다.
왜 이런 일이 발생했는지에 대한 아이디어는 대단히 감사하겠습니다!
for i in range(n):
row = [0 for j in range(n)]
B.append(row)
L.append(row)
U.append(row)
이제 각 목록은 동일한 row
값에 대한 참조를 포함하면 append
B, L의 각 로우 변수 및 U. inverse
카를로스
python 변수 유효 범위 검사 규칙은 무엇입니까? –