알고리즘 문제 풀이 중 거의 18시간 동안 답이 안 나온 문제가 있었다.
아무리 생각해도 오류가 없는데 왜 답이 안되는지 코드 한 줄 한 줄 뜯어보면서 결국엔 알아냈다.
원인은 파이썬 리스트 연산 때문이었다.
아래 두 개의 코드는 결과 출력 값을 보면 똑같다.
하지만 다음 코드를 적용하면 어떤 결과가 나올까?
result[2][1] = "A"
result_lcph[2][1] = "A"
결과 출력
내가 처음 예상한 결과 값은 result와 result_lcph 둘 모두 오른쪽 결과처럼 나왔어야 했다.
하지만 보다시피 전혀 다른 결과를 낸다.
이러한 원인을 공부하고 블로그에 게시하기 위해 파이썬 docs를 찾아본 결과 정확하게 "이것은 종종 새 파이썬 프로그래머들을 괴롭힙니다"라는 문구가 있다.
리스트에 리스트를 연산 방식으로 다차원 리스트를 만드는 경우 모두 같은 리스트를 참조하게 된다고 적혀있다.
그래서 리스트 안의 리스트를 추가시키려는 경우는 리스트 컴프리핸션이나 for문을 이용해야 할 것이다.
무려 18시간 이상을 헤매었지만 그래 이렇게 또 알아가는거다.. .. .
'TIL' 카테고리의 다른 글
tmux 아나콘다 환경으로 변경하기 (0) | 2022.05.13 |
---|---|
[12시간 삽질기].. 아나콘다 파이썬 버전 변경 오류 주의점 (4) | 2022.05.11 |
알고리즘 풀이에 대한 고민 (0) | 2022.04.09 |
[python] decorator 파이썬 데코레이터 이해하기 (0) | 2022.01.22 |
[python] in 연산자의 실행시간, 시간 복잡도 BigO (0) | 2022.01.07 |
댓글