-
카테고리
-
세부 분야
알고리즘 · 자료구조
-
해결 여부
미해결
봉우리 문제에서 0으로 감쌀때 이런식으로 하는건안되나요?
22.01.24 01:08 작성 조회수 97
0
n = int(input())
# 5
l = [[0]*(n+2)]*(n+2)
a = [list(map(int, input().split())) for _ in range(n)]
'''
5 3 7 2 3 3 7 1 6 1 7 2 5 3 4 4 3 6 4 1 8 7 3 5 2
'''
for i in range(n):
for j in range(n):
l[i+1][j+1]=a[i][j]
5x5로 받아준 2차원 행렬을 0으로 감싸고싶어서
for문돌려서 저런식으로했는데 값이 이상해서 for문안에서찍어보니
print(i, j, l[i+1][j+1], a[i][j], sep=', ')
0, 0, 0, 5
0, 1, 0, 3
0, 2, 0, 7
0, 3, 0, 2
0, 4, 0, 3
1, 0, 5, 3
1, 1, 3, 7
1, 2, 7, 1
1, 3, 2, 6
1, 4, 3, 1
2, 0, 3, 7
2, 1, 7, 2
2, 2, 1, 5
2, 3, 6, 3
2, 4, 1, 4
3, 0, 7, 4
3, 1, 2, 3
3, 2, 5, 6
3, 3, 3, 4
3, 4, 4, 1
4, 0, 4, 8
4, 1, 3, 7
4, 2, 6, 3
4, 3, 4, 5
4, 4, 1, 2
이런식으로 나오는데 원래
l = [[0]*(n+2)]*(n+2)
이런식으로 리스트 생성하면 칼럼 전부 다같이 변하나요????
느낌으로는 주소 참조 형식때문인것같은데
리스트 l을 만들때 저런식으로만들면안되고 그냥 하나하나 0을찍어야할까요?
답변을 작성해보세요.
0
김태원
지식공유자2022.01.29
안녕하세요^^
l = [[0]*(n+2)]*(n+2)
위와 같이 2차원을 만들면 첫 번째 행을 반복해서 얕은복사되는 것이라 첫행을 바꾸면 모든 행이 바뀌는 일이 일어납니다.
답변 1