인프런 커뮤니티 질문&답변
그래프 형태 질문드립니다.
작성
·
326
1
g=[[0]*(N) for _ in range(N)] 형태와
g = [[0]*N]*N 형태가 다른가요? 처음 만들때 print를 해보면 형태가 같게 나오지만 각각의 자리에 가중치를 넣으면 형태가 다르게 나와 질문 드립니다.
import sys
sys.stdin = open("input.txt", "rt")
N, M = map(int, input().split())
a = [list(map(int, input().split())) for _ in range(M)]
mat = [[0]*N]*N
g = [[0]*N for _ in range(N)]
print(mat)
print(g)
for r,c,l in a:
g[r-1][c-1] = l
mat[r-1][c-1] = l
for i in range(N):
for j in range(N):
print(mat[i][j], end=' ')
print()
print("=======================")
for i in range(N):
for j in range(N):
print(g[i][j], end=' ')
print()
[[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]] [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]] 2 2 5 5 5 0 2 2 5 5 5 0 2 2 5 5 5 0 2 2 5 5 5 0 2 2 5 5 5 0 2 2 5 5 5 0 ======================= 0 7 4 0 0 0 2 0 5 0 5 0 0 0 0 5 0 0 0 2 0 0 5 0 0 0 0 0 0 0 0 0 0 5 0 0
답변 1
2
김태원
지식공유자
이차원 리스트 생성은 g=[[0]*(N) for _ in range(N)] 와 같이 생성해야 합니다.
g = [[0]*N]*N 같이 생성하면 모양은 비슷하지만 동일한 1차원 리스트를 여러번 복사했을 뿐이라고 알고있습니다.
즉 g[0][0]=7 값을 넣으면 복사된 모든 1차원 리스트의 0번 인덱스가 다 7이 됩니다.
g = [[0]*3]*3
g[0][0]=7
print(g)
를 실행해 보세요.
[[7, 0, 0], [7, 0, 0], [7, 0, 0]] 와 같이 출력됩니다. 저도 자세한 건 모릅니다.





