Python 복사 모듈
Copy 모듈은 리스트, 객체, 배열 등의 다양한 요소를 복사하는 것과 관련된 함수들의 집합입니다. 얕은 복사 (shallow copies) 와 깊은 복사 (deep copies) 모두를 만드는 데 사용될 수 있습니다.
Python 3 문서에서 발췌
Python 의 할당문은 객체를 복사하지 않고, 대상과 객체 사이에 바인딩을 생성합니다. 변경 가능한 항목을 포함하거나 변경 가능한 항목으로 구성된 컬렉션의 경우, 한 복사본을 변경할 때 다른 복사본에 영향을 주지 않으려면 때때로 복사가 필요합니다. 이 모듈은 일반적인 얕은 (shallow) 및 깊은 (deep) 복사 작업을 제공합니다.
얕은 복사 작업 (Shallow copy operations)
얕은 복사는 새로운 복합 객체를 구성한 다음 (가능한 범위 내에서) 원본에 있는 객체에 대한 참조를 그 안에 삽입합니다.
copy.copy(x) x 의 얕은 복사본을 반환합니다.
import copy
a = [[1],[2],[3]]
# 얕은 복사본 생성 (중첩된 리스트는 여전히 참조됨)
b = copy.copy(a)
a
[[1], [2], [3]]
b
[[1], [2], [3]]
copy 모듈을 가져오지 않으면 사용할 수 없습니다
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'copy' is not defined
깊은 복사 작업 (Deep copy operations)
깊은 복사는 새로운 복합 객체를 구성한 다음, 재귀적으로 원본에서 발견된 객체의 복사본을 그 안에 삽입합니다.
copy.deepcopy(x[, memo]) x 의 깊은 복사본을 반환합니다.
import copy
a = [[1],[2],[3]]
# 깊은 복사본 생성 (완전히 독립적인 복사본)
b = copy.deepcopy(a)
# 원본 수정
a[0][0] = 0
a[1] = None
a
[[0], None, [3]]
b
[[1], [2], [3]]