728x90
반응형
- 개요
리스트를 사용하는 경우에서의 주의사항에 대해서 알아본다
리스트는 mutable 시퀀스로 얕은 복사로 인한 문제가 발생한다
얕은 복사 / 깊은 복사에 대한 사항은 다음의 페이지에서 확인할 수 있다
https://monstrosite.tistory.com/637
- 코드
m1 = [['~'] * 3 for _ in range(3)]
m2 = [['~'] * 3] * 3
print(m1)
print(m2)
# 값을 수정
m1[0][1] = 'X'
m2[0][1] = 'X'
print(m1)
print(m2)
print([id(i) for i in m1])
print([id(i) for i in m2])
두 개의 리스트를 생성하되, m1은 3개의 배열을 새롭게 생성하고 m2는 1개의 배열을 3개로 복사하여 생성한다

수정하기 이전의 m1과 m2의 값을 출력하면 위와 같다
의도한 대로 3 X 3의 중첩배열을 생성하였다

수정한 이후의 m1과 m2의 값을 출력하면 위와 같다
의도와 다르게 m2에서는 모든 배열의 1번째 인덱스가 수정되었다
위와 같은 문제는 얕은 복사로 같은 메모리 주소를 참조하는 2개의 객체를 생성하였기 때문이다

실제로 Id를 확인해보면 m1의 경우 일일이 생성하여 메모리의 주소가 다르지만,
m2의 경우 메모리의 주소가 전부 동일한 것을 확인할 수 있다
728x90
반응형
'Python > 파이썬 심화' 카테고리의 다른 글
| 파이썬 시퀀스 (5) (0) | 2025.08.07 |
|---|---|
| 파이썬 시퀀스 (4) (0) | 2025.08.07 |
| 파이썬 시퀀스 (2) (0) | 2025.08.05 |
| 파이썬 시퀀스 (1) (0) | 2025.08.05 |
| 네임드 튜플 (2) (0) | 2025.08.04 |