블로그

[파이썬] Python 에서 deep copy 와 shallow copy

파이썬에서 배열이나 딕셔너리등 오브젝트를 다른 변수에 대입 후 사용할 경우

보통

a = b

이렇게 사용합니다. 이런 경우 a 는 b 의 포인터(메모리주소)를 가지고 있고

a 의 값을 변경할 경우 b 의 값도 변경이 됩니다. 이 상황을 이해 못 하고

사용할 경우 알지 못 하는 버그와 씨름할 수 있는 경우가 생깁니다.

python 에서는 변수 대입시 shallow copy 와 deep copy 가 있습니다.

shallow copy 는 위의 경우와 같이 주소값을 복사하는 것이고 deep copy 는

오브젝트의 컨텐츠를 모두 복사하여 새로운 주소에 새로운 변수를 생성하므로 서로 엮이지 않습니다.

shallow copy 의 경우

import copy

a = [1, 2, 3, 4]
b = copy.copy(a)

b.append(5)

print b
[1, 2, 3, 4, 5]

print a
[1, 2, 3, 4, 5]

deep copy 는

import copy

a = [1, 2, 3, 4]
b = copy.deep_opy(a)

b.append(5)

print b
[1, 2, 3, 4, 5]

print a
[1, 2, 3, 4]