Python
리스트 초기화 방법과 리스트 컴프리헨션 활용
포시
2023. 4. 24. 17:04
728x90
개요
graph1 = [[], [], []]
graph2 = [[]] * 3
print('graph1: ', graph1) # graph1: [[], [], []]
print('graph2: ', graph2) # graph2: [[], [], []]
graph1[1].append(4)
graph2[1].append(4)
print('graph1: ', graph1) # graph1: [[], [4], []]
print('graph2: ', graph2) # graph2: [[4], [4], [4]]
혼자 공부하다 이상한걸 발견했는데
위 코드처럼 생김새가 같은 graph1, graph2가 같은 코드에 대해 각기 다른 결과를 내고 있었다.
javascript에서 겪은 경험을 토대로 graph2는 안의 요소인 각 리스트가 다 같은 리스트를 참조하고 있어
하나에 값을 추가해도 모두 같은 리스트라 전부 추가된다는 것을 유추할 수 있었다.
그럼 항상 직접 리스트를 직접 써서 만들어줘야 하냐?
3개라면 직접 작성해도 금방 작성해서 문제가 없지만
리스트 개수가 더 많거나 상황에 따라 달라질 경우에는 문제가 된다.
해결
graph = [[] for _ in range(3)]
print('graph: ', graph) # graph: [[], [], []]
graph[1].append(4)
print('graph: ', graph) # graph: [[], [4], []]
위 문제는 리스트 컴프리헨션을 쓰면 간단히 해결된다.
이럴 경우 각 리스트 요소들은 각기 다른 리스트로 생성되기 때문에 위에서 겪은 문제가 발생하지 않는다.
728x90