일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- boto3
- decorator
- 코딩 테스트
- r-string
- Python
- OS
- reverse v.s. reversed
- Airflow
- PIP
- S3
- os.path
- sort(reverse=True) v.s. reverse
- functools.wraps
- 함수형 프로그래밍
- timestamp
- 고차함수
- ds_store
- 순수함수
- pandas
- slicing [::-1]
- [초급(예비) 개발자 오픈소스 실무 역량강화 교육]
- 쿼리
- blinker
- selenium-wire
- 생각
- sort v.s. sorted
- CI/CD
Archives
- Today
- Total
공부일지
[코딩테스트]Python의 리스트의 얕은 복사를 통해 알아보는 참조문제 본문
백준 문제를 풀다가 변수 matrix(행렬, 2차원 배열)가 값이 이상하게 할당되는 것을 조사식을 통해 확인했다.
matrix1 과 matrix2의 원소를 합치는 함수를 짰는데
matrix 내에 배열의 값이 똑같이 들어가는 것이다. (아래 캡처 및 코드 참고)
(백준문제 참고 링크: https://www.acmicpc.net/problem/2738)
def add_matix_elements(n, matrix1, matrix2):
matrix = [[0]*n] * n
for i in range(n):
for j in range(n):
matrix[i][j] = matrix1[i][j] + matrix2[i][j]
return matrix
이유는 얕은 복사 때문이다. 그리고 자료형!(가변객체, 불변객체)
리스트에서 *는 반복(복사)하겠다는 의미인데, 이렇게 되면 얕은 복사로 인해 자료형의 같은 주솟값을 참조하게 된다.
내가 원한 건 서로 다른 1차원 배열로 이루어진 2차원 배열인데
서로 같은 주소를 가지는 1차원 배열로 이루어진 2차원 배열이 되어버린 것이다.
해결
matrix = [[0 for _ in range(m)] for _ in range(n)]
혹은
matrix = [[0]*m for _ in range(n)]
+) [0]*m 은 0이 불변객체인 상수여서 가능한 것이다. 단순히 0을 n개 포함하는 리스트를 만드는 간단한 방법일 뿐!
'Computer > Coding Tests' 카테고리의 다른 글
[코딩 테스트]입력 처리 open(0)과 f.close() 사용 (0) | 2025.05.02 |
---|---|
[코딩 테스트] Python을 통해 알아보는 이진탐색과 비트연산자 (0) | 2025.04.01 |
[코딩 테스트]Python을 이용한 BFS, DFS 구현 방법(반복문, 재귀)(인접행렬, 인접 리스트) (0) | 2025.03.27 |
[코딩 테스트]BFS로 보는 [Bool] v.s. [Node], visited 배열 쓸 때와 result 배열만 쓸 때의 차이(서로 관련 있음) (0) | 2025.03.26 |
[코딩 테스트]시간 재는 모듈 time v.s. timeit 차이 (0) | 2025.03.21 |