본문으로 건너뛰기

Python - 리스트 얕은 복사, 깊은 복사

리스트를 copy할 때, 얕은 복사 방법과 깊은 복사 방법을 이용하여 copy할 수 있습니다. 예제와 함께 알아보겠습니다.

1. 얕은 복사 (Shallow copy)

얕은 복사는 리스트 객체를 복사하지만, 리스트 안에 저장된 요소 객체들은 복사하지 않고 함께 참조하는 것을 말합니다.

원본 리스트와 복사된 리스트에서 동일한 요소 객체를 참조하기 때문에, 요소 내부의 값이 변경되면 원본 리스트와 복사된 리스트에서도 변경된 값을 참조하게 됩니다.

아래 예제는 copy() 함수를 사용하여 얕은 복사를 하는 예제인데, 결과를 보시면, 복사된 리스트의 값을 변경해도 원본 리스트의 값도 함께 변경되는 것을 볼 수 있습니다.

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

# copy() 메서드를 사용하여 얕은 복사를 수행
shallow_copy_list = original_list.copy()

# 얕은 복사로 복사된 리스트는 원본 리스트와 같은 객체들을 참조
shallow_copy_list[2][0] = 100

print(original_list)
print(shallow_copy_list)

실행 결과

[1, 2, [100, 4]]
[1, 2, [100, 4]]

슬라이싱을 이용한 얕은 복사

아래 처럼 슬라이싱을 이용하여 얕은 복사를 할 수 있습니다.

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

# 슬라이싱을 사용하여 얕은 복사 수행
shallow_copy_list = original_list[:]

# 얕은 복사로 복사된 리스트는 원본 리스트와 같은 객체들을 참조
shallow_copy_list[2][0] = 100

print(original_list)
print(shallow_copy_list)

실행 결과

[1, 2, [100, 4]]
[1, 2, [100, 4]]

2. 깊은 복사 (Deep copy)

깊은 복사는 리스트 뿐만 아니라, 리스트가 참조하는 요소 객체도 복사하는 것을 말합니다.

그렇기 때문에, 복사된 리스트의 요소 값을 변경해도 원본 리스트가 참조하는 객체에 영향을 주지 않게 됩니다.

아래 예제는 deepcopy()를 이용하여 리스트를 깊은 복사하는 예제입니다.

import copy

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

# deepcopy() 함수를 사용하여 깊은 복사를 수행
deep_copy_list = copy.deepcopy(original_list)

# 얕은 복사로 복사된 리스트는 원본 리스트와 다른 요소 객체들을 참조
deep_copy_list[2][0] = 100

print(original_list)
print(deep_copy_list)

실행 결과

[1, 2, [3, 4]]
[1, 2, [100, 4]]