파이썬 리스트의 고급 슬라이싱 연산과 N차원 다차원 테이블 생성, 그리고 객체 참조 시 발생하는 별명(Alias) 참조와 **깊은 복사(Deep Copy)**를 다룹니다.
1. 리스트 및 매트릭스 핵심 용어 사전 (Glossary)
- Aliasing (별명 참조):
b = a처럼 기존 리스트 객체의 메모리 주소를 그대로 가리켜, 한쪽을 수정하면 다른 쪽도 동시 수정되는 현상입니다. - Shallow Copy (얕은 복사):
c = a[:]또는a.copy()처럼 최상위 리스트 객체만 새로 복사하고 내부 요소 포인터는 공유하는 방식입니다. - Deep Copy (깊은 복사):
import copy; c = copy.deepcopy(a)로 중첩된 N차원 리스트 내부의 모든 요소까지 완전히 새로운 독립 객체로 재귀 복사하는 기술입니다.
2. 실전 코드: 리스트 정렬, 컴프리헨션 및 2D/3D 매트릭스 생성
import copy
# 1. 리스트 메소드 (sort, insert, count) 및 컴프리헨션
L = [2, 3, 1, 5, 4, 5]
L.sort() # 제자리 정렬
L.insert(0, 99) # 0번 인덱스에 99 삽입
print(f"정렬 및 삽입 결과: {L} (값 5의 개수: {L.count(5)})")
# 2. 2D 다차원 테이블 생성 (Height 2, Width 3)
height, width = 2, 3
table_2d = [[None] * width for i in range(height)]
table_2d[0][1] = "Data_0_1"
print("=== [2D 매트릭스] ===")
print(table_2d)
# 3. Aliasing (별명 지정) vs Deepcopy
orig = [[1, 2], [3, 4]]
alias = orig # Alias (동일 메모리 참조)
shallow = orig[:] # Shallow Copy
deep = copy.deepcopy(orig) # Deep Copy
orig[0][0] = 999
print(f"원본 수정 후 -> Alias: {alias[0][0]}, Shallow: {shallow[0][0]}, Deep: {deep[0][0]}")