코딩테스트 공부/Python

Python) 빈 리스트 만들어보기 (Shallow Copy, Deep Copy)

Stat_in_KNU 2020. 5. 29. 14:46

파이썬 코드를 짜다보면 빈 리스트를 만들어야하는 경우가 종종 있다..

 

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) vs 깊은 복사(deep copy)

이번에는 객체의 복사에 대해서 알아보려고 합니다. 객체의 복사는 크게 얕은 복사(shallow copy)와 깊은 복사(deep copy)로 나뉩니다. 얼핏 들으면 단어 자체의 의미가 모호하게 느껴질 수도 있습니다

blueshw.github.io

그러면 Shallow Copy 없이  2차원의 빈리스트를 만들고 싶으면 어떻게 해야할까?

가장 일반적으로는 for문에 길이만큼 리스트를 append하면 되겠지만 

파이썬이니까, Comprehension을 쓰자.

 

a = [[0 for j in range(5)] for i in range(5)]

 

 

for문이 여러개 들어가는 Comprehesion을 연습할겸 손에 익히자!