티스토리 뷰
반응형
코드를 짜면서 종종 이중 배열을 초기화하는 경우가 있다. 이때 조심해야할 부분을 알려줄려고 이렇게 글을 적고자 한다.
보통 초기화하는 방법은 3가지 정도 있습니다.
1. [['-'] *3 for _ in range(3)]
이러한 케이스는 어떨까요?
확인해볼까요?
지금 2번째 사진을 보고 어? 뭐지 왜 id가 다 같지?
라고 생각이 문득 들 수가 있습니다. 하지만 안심하세요. 파이썬에서는 스트링에 대해서 모두 공유를 하는 성격을 가지고 있어서 id가 같은 것입니다.
그렇죠?
우리는 하나의 요소가 아닌 row의 id가 같은 지 확인 해봐야 합니다.
결과를 보면 다르는 것을 볼 수가 있습니다.
쉽게 설명하기 위해서 알아보기 쉽게 변환해보도록 해봅시다.
xbox1 = []
for _ in range(3):
row = ['-']*3
xbox1.append(row)
이렇게 보니 왜 row 의 id가 다른지 이해가 가시죠?
그러면 한 번 값의 변화를 줬을 때 어떻게 변할까요?
어셈블러로 동작했을 때는
2. [['-']*3]*3
사실 이 글을 쓴 이유는 2번 스타일을 지양하자고 말하고 싶어서 쓰게 되었습니다. (물론 의도적으로 이렇게 할 수도 있습니다.)
3번 째 사진을 보면 row의 아이디가 다 같은 것을 볼 수가 있습니다. 왜그럴까요?
한 번 풀어서 써보겠습니다.
xbox2 = []
row = ['-'] * 3
for _ in range(3):
xbox2.append(row)
똑같은 결과가 나온 것을 볼 수가 있습니다.
그렇습니다. 같은 row이므로 하나의 row에 대해서도 변화를 주게 되면 같은 행이 다 변하게 됩니다.
어셈블러로 동작했을 때는
3. [ [ '-' for _ in range(3)] for _ in range(3)]
솔직히 이것은 안봐도 뻔하죠? ㅎㅎ 그래도 한 번 보도록 하겠습니다.
결론
이중 배열을 썼을 때 2번 스타일 형태의 복사만 안하셔도 많은 트러블에서 벗어날 수 있습니다.
반응형
'파이썬' 카테고리의 다른 글
Pytest reportlog 에 PR 후기 및 그리고 사용방법 (0) | 2022.02.19 |
---|---|
[Python] Decorator 개념 정리 (0) | 2021.12.25 |
[Python][Celery] 병렬작업을 진행하는 방법 (0) | 2021.12.20 |
디스크립터 [ __get__] [__set__][python] (0) | 2021.09.15 |
[python] [path] [PYTHONHOME] [PYTHONPATH] 파이썬 경로 문제 해결 (0) | 2021.08.18 |
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Python
- dockerignore
- Collections
- Linux
- docker-compose
- 카카오
- Spring
- Pattern
- ubuntu
- env
- postgres
- 프로그래머스
- 파이썬
- Command Line
- Java
- django
- docker
- Celery
- 2021 KAKAO BLIND RECRUITMENT
- 자바
- DRF
- 알고리즘
- 그래프
- setattr
- PostgreSQL
- 백준
- thread
- 면접
- headers
- BFS
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함