파이썬에서 객체 복사하는 두 가지 방법
- 얕은 복사 (shallow copy)
- 깊은 복사 (deep copy)
아래는 얕은 복사의 예시 코드입니다.
# 리스트 a와 b를 만듭니다.
a = [1, 2, [3, 4]]
b = a
c = a.copy()
# a와 b를 출력해봅니다.
print(“a =”, a)
print(“b =”, b)
print(“c =”, c)
# a[2]의 값을 변경합니다.
a[2][0] =5
# a와 b를 다시 출력해봅니다.
print(“a =”, a)
print(“b =”, b)
print(“c =”, c)
실행 결과는 다음과 같습니다.
a = [1, 2, [3, 4]]
b = [1, 2, [3, 4]]
c = [1, 2, [3, 4]]
a = [1, 2, [5, 4]]
b = [1, 2, [5, 4]]
c = [1, 2, [5, 4]]
위 코드에서는 리스트 a와 b와 c를 만들고, b= a, a.copy()를 통해 a의 얕은 복사본 b와c를 만들었습니다. 그리고 a[2][0]의 값을 변경했을 때, b와c의 해당 데이터도 변경되었습니다.
따라서 얕은 복사는 객체를 복사하면서 참조하고 있는 객체가 있을 경우,
원본과 복사본이 서로 영향을 미친다는 점에 유의해야 합니다.
깊은 복사는 원본 객체의 모든 데이터를 복사해서 새로운 객체를 만드는 것을 말합니다.
따라서 원본 객체의 데이터가 변경되어도, 복사된 객체는 영향을 받지 않습니다.
다음의 깊은 복사의 예시 코드입니다.
# 리스트 a와 b를 만듭니다.
import copy
a = [1, 2, [3, 4]]
b = copy.deepcopy(a)
# a와 b를 출력해봅니다.
print(“a =”, a)
print(“b =”, b)
# a[2]의 값을 변경합니다.
a[2][0] =5
# a와 b를 다시 출력해봅니다.
print(“a =”, a)
print(“b =”, b)
실행 결과는 다음과 같습니다.
a = [1, 2, [3, 4]]
b = [1, 2, [3, 4]]
a = [1, 2, [5, 4]]
b = [1, 2, [3, 4]]
위 코드에서는 copy모듈의 deepcopy 함수를 이용해서 리스트 a의 깊은 복사본 b를 만들었습니다.
그리고 a[2][0]의 값을 변경했을 때, b의 해당 데이터는 변경되지 않았습니다.