더북(TheBook)

결과는 동일하지만, 두 풀이 방법은 문제를 해결하기 위한 접근 방식이 다릅니다. 이 방법 말고도 여러 가지 방법으로 풀 수 있으니, 문제를 만나면 항상 다양한 방법으로 풀 수 있을지를 고민해보세요.

잠깐만요

배열을 생성하고 값을 바꿨더니 다른 곳에도 영향을 미친다면?

문제 풀이에서 2차원 배열을 생성하기 위해 리스트 컴프리헨션을 사용했는데, 한 가지 주의해야 할 점이 있습니다. 리스트의 곱셈은 동일한 데이터의 주소를 복사하는 얕은 복사(shallow copy)이기 때문에 리스트의 곱셈을 2번 해서 [[v]*n]*n처럼 2차원 배열을 생성할 경우 생성된 1차원 배열을 여러 개 복제(access)하여 사용하는 것이므로 값을 수정하면 복사된 모든 배열의 동일한 위치에 있는 값이 같이 변경됩니다. 따라서 [[0]*10 for i in range(10)]처럼 직접 숫자를 생성하여 할당하는 방식으로 2차원 배열을 생성해야 합니다.

1차원 배열의 곱셈도 동일하게 얕은 복사이지만, 2차원 배열의 곱셈(1차원 배열 복사)과 다르게 복사한 값이 정수 0(정수 0을 담고 있는 주솟값)이기 때문에 이 값이 다른 값으로 변경될 수 없고, 새 값을 할당(assign)하면 해당 값만 동일한 값이 아닌 다른 값으로 할당되므로 다른 값이 같이 변경되지 않습니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.