
1차원 배열을 선언할 때는 다음과 같이 선언할 수 있다.
rows = 5
arr = [0] * rows
# [0, 0, 0, 0, 0]
이렇게 입력하면 rows크기의 배열이 arr변수로 선언된다.

row = 4, col = 3 인 경우이다.우선 1차원 배열하는 방식으로 2차원 배열도 해보자.
rows = 5 #가로
cols = 3 #세로
arr = [[0] * cols] * rows
# [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]
arr[0][0] = 1
# [[1, 0, 0], [1, 0, 0], [1, 0, 0], [1, 0, 0], [1, 0, 0]]
나는 arr[0][0]값만 1로 변경하려고 했는데, 이와 같이 하면 모든 행의 [0]값이 1로 변경된다.
이렇게 되는 이유는, *연산자를 이용했기 때문이다. *연산자를 이용하여 배열을 선언하게 되면, 얕은 복사가 진행되기 때문에 배열 내의 요소들이 같은 객체를 가리키게 된다. (얕은 복사와 깊은 복사에 대해서는 추후 작성할 예정이다.)
rows = 5
cols = 3
arr = [[0 for j in range(cols)] for i in range(rows)]
이같은 방식으로 for문을 이용하여 선언하면 된다.
선언 후 아까와 같이 첫번째 행의 첫번째 열을 1로 바꿔보자.
arr[0][0] = 1
# [[1, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]
성공 !
출처
2차원 배열 선언하기