Programming/Python

파이썬 copy(얕은복사, 깊은복사 복사기능)

KayEsQuo 2021. 2. 22. 22:02

시작전..

정보를 담고있는 리스트를 사용시 원본데이터를 다른 변수에 할당하는 복사를 사용해야하는 경우가 있다. 

리스트를 복사할때 항상 발견되는 문제점이 있었는데, 그건 복사된 리스트를 수정 시 원본까지 수정되어버리는 결과가 나타난다. 이것은 얕은복사와 깊은복사에 관련되어있는데 설명과 예시는 다음과 같다.

 

 

1) 얕은복사 copy.copy()

import copy

a = [[1,2],[3,4],[5,6]]
b = copy.copy(a)
b[1].append(100)
print(a)    # [[1, 2], [3, 4, 100], [5, 6]]
print(b)    # [[1, 2], [3, 4, 100], [5, 6]]

얕은복사

 

위그림에서 알 수 있든 두개의 변수a(원본리스트) 변수b(얕은복사 리스트)는 같은 주소값을 바라보고 있다. 

즉 얕은복사는 변수a와 변수b를 독립적인 개체로 보지않고 하나의 데이터를 바라보게 함으로써, 같은 모습을 하고있다.

2) 깊은복사 copy.deepcopy()

import copy

a = [[1,2],[3,4],[5,6]]
b = copy.deepcopy(a)
b[1].append(100)
print(a)    # [[1, 2], [3, 4], [5, 6]]
print(b)    # [[1, 2], [3, 4, 100], [5, 6]]

 

깊은복사

 

진정한 복사는 깊은복사 deepcopy라고 생각한다. 얕은복사에 비해 깊은복사에서 2개의 변수는 각각의 주소값을 따로 가리키고 있다. 즉 깊은복사는 변수a와 변수b를 독립적인 개체로 나타낼 수 있으며, 메모리또한 같다.