파이썬의 주소참조 관련된 개념인데 자세한건 구글링해서 공부하시는걸 추천하고 대충이해만 하시길
matrix자체도 2차원 리스트, 즉 원소가 matrix[0], matrix[1]... 인 리스트를 가집니다.
submatrix = list(matrix) 형식으로 하면 submatrix 와 matrix는 달라도 참조하는 리스트주소값은 그대로입니다.
즉, submatrix[0] = matrix[0], submatrix[1] = matrix[1].... 처럼 연산되어서 같은 객체를 참조합니다. 사실상, submatrix = matrix 랑 결과는 비슷함
A = [1,2,3]
B = list(A) 랑 다른이유는 원소가 리스트가 아닌 단일객체임.
예를들어서,
n, m =3, 3
L = [[0]*m]*n # [[0,0,0],[0,0,0],[0,0,0]]
L[1][1] = 1 #[[0,1,0],[0,1,0],[0,1,0]]
처럼 되는데, 내부적으로 포함된 3개의 리스트가 모두 동일한 객체에에 대한 3개의 레퍼런스로 인식되기 떄문입니다.
[0]*m은 0에 대해서 복사를 하는거라 상관이 없습니다. 근데 [0.0.0]에 대해서 복사를 하는경우 문제가 생김. 리스트이기 때문에
따라서 위의경우는, L = [[0]*m for _ in range(N)] 처럼 초기화를 해줘야 원하는 방식으로 사용가능합니다.
문제로 돌아와서, 이런경우 복사를 하고싶으시면 from copy import deepcopy 를 통해submatrix = deepcopy(matrix) 처럼 사용하시거나,
따로 함수를 만들어서 2차원 배열인 submatrix을 선언하고 matrix의 원소를 하나하나 탐색하면서 넣어줘야합니다 (submatrix[i][j] = matrix[i][j])


mauzerne 3년 전
제가 의도한 코드는 matrix 리스트에 입력을 받고, bfs로 matrix를 탐색하다가
벽(-1)을 만나면 wallbfs 함수를 실행시키고 함수 로컬변수 submatrix에 matrix를 복제해서 submatrix를 bfs로 탐색합니다. << 28행
근데 submatrix에 입력된 값이 matrix에도 입력이 됩니다.
if submatrix is matrix: 로 확인하면 둘이 다른 리스트임이 확인되는데
이런 결과를 이해할수가 없어서 질문 올려봅니다