[파이썬][리스트] 리스트를 복사할 때 발생할 수 있는 문제

리스트를 복사할 때 발생할 수 있는 문제를 예제를 통해 자세히 알아보겠습니다. 예제에서는 얕은 복사와 깊은 복사의 차이점을 강조하고, 내부 리스트의 문제를 다룰 것입니다.

1. 얕은 복사의 내부 리스트 문제:

original_list = [[1, 2, 3], [4, 5, 6]]

# 얕은 복사를 통해 새로운 리스트 생성
shallow_copy = original_list.copy()

# 내부 리스트의 내용 변경
shallow_copy[0][0] = 100

# 원본 리스트와 얕은 복사본 모두 변경되는 문제
print("Original list:", original_list)  # 출력: Original list: [[100, 2, 3], [4, 5, 6]]
print("Shallow copy:", shallow_copy)    # 출력: Shallow copy: [[100, 2, 3], [4, 5, 6]]

2. 깊은 복사로 내부 리스트 문제 회피:

import copy

original_list = [[1, 2, 3], [4, 5, 6]]

# 깊은 복사를 통해 새로운 리스트 생성
deep_copy = copy.deepcopy(original_list)

# 내부 리스트의 내용 변경
deep_copy[0][0] = 100

# 원본 리스트와 깊은 복사본은 서로 독립적으로 유지됨
print("Original list:", original_list)  # 출력: Original list: [[1, 2, 3], [4, 5, 6]]
print("Deep copy:", deep_copy)          # 출력: Deep copy: [[100, 2, 3], [4, 5, 6]]

위의 예제에서 얕은 복사를 사용할 때는 내부 리스트의 값 변경이 원본 리스트에도 영향을 미친 반면, 깊은 복사를 사용할 때는 내부 리스트의 변경이 원본 리스트에 영향을 미치지 않음을 확인할 수 있습니다. 이를 통해 복사 방식 선택의 중요성과 내부 리스트 문제에 대한 이해를 얻을 수 있습니다.