파이썬 코드를 짜다보면 빈 리스트를 만들어야하는 경우가 종종 있다..
a = [0]*n
이런식으로 만들어도 큰 문제는 없다.
문제는 2차원으로 만들때다.
a = [[0]]*n]*k
이렇게 만들면 아래와 같은 결과가 나오는데
이제 빈 리스트에 값을 할당해주면
이런식으로 모든 내부리스트의 원소에 1이 할당되는.. 기이한 현상이 일어난다.
Shallow Copy가 일어나는 것 같은데 정확한 이유는 잘 모르겠다.
Deep Copy와 Shallow Copy에 대한 내용은 아래 블로그를 참고하자.
https://blueshw.github.io/2016/01/20/shallow-copy-deep-copy/
그러면 Shallow Copy 없이 2차원의 빈리스트를 만들고 싶으면 어떻게 해야할까?
가장 일반적으로는 for문에 길이만큼 리스트를 append하면 되겠지만
파이썬이니까, Comprehension을 쓰자.
a = [[0 for j in range(5)] for i in range(5)]
for문이 여러개 들어가는 Comprehesion을 연습할겸 손에 익히자!
'코딩테스트 공부 > Python' 카테고리의 다른 글
Python) collections 내장 모듈 (0) | 2020.06.02 |
---|---|
자료구조) Heap자료구조와 파이썬 Heapq 내장모듈 (0) | 2020.05.31 |
파이썬) 딕셔너리에 대해 알아보자 (0) | 2020.05.30 |