SeouliteLab

[Python/파이썬] 리스트 복사: Deep Copy vs Shallow Copy 본문

프로그래밍

[Python/파이썬] 리스트 복사: Deep Copy vs Shallow Copy

Seoulite Lab 2024. 3. 2. 20:55

리스트 복사는 Python 프로그래밍에서 매우 중요한 작업 중 하나입니다. 특히, 복사를 할 때에는 Deep Copy와 Shallow Copy의 개념을 이해하는 것이 중요합니다. 이번 글에서는 Deep Copy와 Shallow Copy의 개념을 설명하고, 각각의 예제를 통해 이를 살펴보겠습니다.

1. Shallow Copy

Shallow Copy는 복사된 객체가 원본 객체의 참조를 공유하는 것을 의미합니다. 이는 새로운 객체를 생성하지만, 내부의 객체는 동일한 객체를 참조합니다.

import copy

original_list = [[1, 2, 3], [4, 5, 6]]
shallow_copy = copy.copy(original_list)

# 변경 전
print(original_list)  # 출력 결과: [[1, 2, 3], [4, 5, 6]]
print(shallow_copy)   # 출력 결과: [[1, 2, 3], [4, 5, 6]]

# 내부 객체 변경
original_list[0][0] = 100

# 변경 후
print(original_list)  # 출력 결과: [[100, 2, 3], [4, 5, 6]]
print(shallow_copy)   # 출력 결과: [[100, 2, 3], [4, 5, 6]]

2. Deep Copy

Deep Copy는 원본 객체와 복사된 객체가 완전히 독립적인 복사본을 가지는 것을 의미합니다. 내부 객체까지 재귀적으로 복사됩니다.

import copy

original_list = [[1, 2, 3], [4, 5, 6]]
deep_copy = copy.deepcopy(original_list)

# 변경 전
print(original_list)  # 출력 결과: [[1, 2, 3], [4, 5, 6]]
print(deep_copy)      # 출력 결과: [[1, 2, 3], [4, 5, 6]]

# 내부 객체 변경
original_list[0][0] = 100

# 변경 후
print(original_list)  # 출력 결과: [[100, 2, 3], [4, 5, 6]]
print(deep_copy)      # 출력 결과: [[1, 2, 3], [4, 5, 6]]

3. 주의사항

Shallow Copy와 Deep Copy를 사용할 때는 내부 객체까지 어떻게 처리되는지 주의해야 합니다. 복사된 객체가 원본 객체의 참조를 공유할 수 있는지 여부를 확인해야 합니다.

# 주의사항 예제
original_list = [[1, 2, 3], [4, 5, 6]]
shallow_copy = copy.copy(original_list)

original_list.append([7, 8, 9])

print(original_list)  # 출력 결과: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print(shallow_copy)   # 출력 결과: [[1, 2, 3], [4, 5, 6]]

Python에서 리스트 복사를 다룰 때는 Shallow Copy와 Deep Copy의 개념을 잘 숙지해야 합니다. 각각의 상황에 맞게 적절한 방법을 선택하여 사용해야 합니다.