Shallow Copy Issue

2025. 2. 24. 15:02·coding test/etc

백준 1260번 DFS와 BFS를 풀면서 입력을 받을 때 이상했던 점이 있었다.

두 정점 사이의 간선을 입력받을 때, 해당 간선 정보가 전체 리스트에 중복되어 기록되었다.

 

아래는 내가 짰던 코드이다.

n,m,v=map(int,input().split()) #n:정점수,m:간선수,v:시작정점
matrix=[[0]*(n+1)]*(n+1)

for _ in range(m):
    v1,v2=map(int,input().split())
    matrix[v1][v2]=1
    matrix[v2][v1]=1
  
    
'''
#Input
4 5 1
1 2
1 3
1 4
2 4
3 4

#Output
[[0, 1, 1, 1, 1],
 [0, 1, 1, 1, 1],
 [0, 1, 1, 1, 1],
 [0, 1, 1, 1, 1],
 [0, 1, 1, 1, 1]]
 '''

 

이 코드의 문제는 다음 부분에 있었다.

matrix = [[0] * (n + 1)] * (n + 1)

해당 코드가 다음과 같이 동작되는 것이였다.

  • 내부 리스트 [0] * (n + 1)가 먼저 생성
  • 그 후, 같은 객체를 (n + 1)번 곱해서 참조

즉, 모든 행이 동일한 객체를 참조하기 때문에 한 행을 수정하면 나머지 행들도 동일하게 변경된다.

 

이는 얕은 복사(shallow copy) 문제였다. 

 

matrix를 올바르게 초기화하려면 각 행을 개별적으로 생성해야 하므로 다음과 같이 수정하면 되었다.

matrix = [[0] * (n + 1) for _ in range(n + 1)]
 
 

'coding test > etc' 카테고리의 다른 글

[Python] heapq 라이브러리  (0) 2025.05.22
Python에서 input()과 sys.stdin.readline()의 차이  (0) 2025.04.23
'coding test/etc' 카테고리의 다른 글
  • [Python] heapq 라이브러리
  • Python에서 input()과 sys.stdin.readline()의 차이
wish404
wish404
자동 로그
  • wish404
    wish-log
    wish404
    • 홈
    • 태그
    • 방명록
    • github
    • 분류 전체보기 (75)
      • log (8)
        • 블로그 관리 (5)
        • 에러 모음 (2)
      • coding test (47)
        • Algorithm (4)
        • Baekjoon (34)
        • SW Expert Academy (6)
        • etc (3)
      • 프로그래밍 언어 (7)
        • JAVA (7)
      • 데이터 엔지니어링 (5)
        • Kafka (0)
        • Spark (4)
        • Airflow (1)
        • Elasticsearch (0)
      • 머신러닝&딥러닝 (3)
        • Kaggle 스터디 (3)
        • 논문 리뷰 (0)
        • MLOps (0)
      • 신입 개발자가 되기까지 (5)
        • 취준일기 (1)
        • SSAFY (2)
        • 프로젝트 (1)
        • CS 공부 (1)
  • 인기 글

  • 태그

    다익스트라
    벨만포드
    dijk
    후위순회
    틀린문제
    최단 경로
    싸피
    그리디 알고리즘
    Dijkstra
    dfs
    SSAFY
    heapq
    복습해야지
    복습
    BFS
    dp
    플로이드워샬
    중위순회
    전위순회
    그리디
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
wish404
Shallow Copy Issue
상단으로

티스토리툴바