ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2차원 리스트 초기화 시 주의할 점
    Python 2020. 10. 12. 17:06
    반응형

    n x n 2차원 리스트를 0으로 초기화 시켜보고자 합니다.

     

    파이썬의 리스트 관련 문법을 살펴보다 보면 아래와 같이 초기화 할 수 있을 것으로 생각합니다.

    n = 4
    
    two_dimensional_list = [[0] * n] * n
    
    for e in two_dimensional_list:
        print(e)
    

    위의 코드를 실행해보면 다음 그림과 같이 정상적으로 초기화 된 것으로 보입니다.

     

    하지만 리스트 요소 값 중 하나를 다른 값으로 업데이트 해보도록 하겠습니다.

    n = 4
    
    two_dimensional_list = [[0] * n] * n
    
    for e in two_dimensional_list:
        print(e)
    print("=============")
    two_dimensional_list[0][0] = 1
    
    for e in two_dimensional_list:
        print(e)
    
    

    다음과 같이 의도한 바와 다르게 모든 two_dimensioanl_list[n][1]의 요소가 1로 바뀌게 되는 것을 확인할 수 있습니다.

     

    위와 같은 문제가 발생하는 이유는 다음과 같습니다.

    • list 타입 변수(이하 A)에 * 연산을 하는 경우 list의 모든 원소들에 대해 복사를 진행하게 됩니다.
    • A에 원소 중에 list 타입의 원소(이하 B)가 있다고 할 때, A * n 하면
    • 메모리 상에 B가 여러개 생성되는 것이 아니라 B는 그대로 하나만 있고 그것을 가르키는 포인터만 증가하게 됩니다.

     

    따라서 2차원 리스트 초기화를 위해서는 다음과 같은 구문을 사용하도록 합니다.

    n = 4
    
    two_dimensional_list = [[0] * n for _ in range(n)]
    for e in two_dimensional_list:
    	print(e)
    print("=============")
    two_dimensional_list[0][0] = 1
    for e in two_dimensional_list:
    	print(e)
    

    실행 결과 2차원 리스트의 초기화가 적절히 진행된 것을 확인해볼 수 있습니다.

    'Python' 카테고리의 다른 글

    유용한 표준 라이브러리  (0) 2020.12.24
    Python 기본 정렬과 커스텀 정렬  (0) 2020.12.24
    문자열 뒤집기  (0) 2020.12.21
    console 입출력과 형변환  (0) 2020.10.08
    class 사용하기  (0) 2020.09.28

    댓글

Designed by Tistory.