[파이썬]copy 모듈의 고찰
in Development on Python
copy 모듈에 대한 글을 남긴다.
참고 : [참고 블로그 : [Python] copy 모듈 존재의 이유]http://seorenn.blogspot.com/2011/05/python-copy.html)
copy 모듈의 고찰
- copy에는 swallow copy와 deep copy가 있다.
- 무언가 공유하는 상태의 리스트를 만질 때는 딥카피를 사용해야할 상황이 생길것 같다.
1. copy 필요 이유
a = [1, 2, 3]
b = a
a[1] = 99
a
[1, 99, 3]
b
[1, 99, 3]
이렇게 a를 바꿨음에도 b에 영향을 준다. (동일한 메모리를 가르키기 때문)
2-1. 리스트를 복사하여 해결
a = [1, 2, 3]
b = a[:]
a[1] = 99
a
[1, 99, 3]
b
[1, 2, 3]
2-2 copy 모듈로 복사하는 효과로 해결
import copy
a = [1, 2, 3]
b = copy.copy(a)
a[1] = 99
a
[1, 99, 3]
b
[1, 2, 3]
2-3 (2-1, 2-2)방법이 꼬이는 상황(중첩된 리스트 상황)
a = [1, 2, 3]
b = [4, a, 6]
b
[4, [1, 2, 3], 6]
c = b[:]
c
[4, [1, 2, 3], 6]
a[1] = 99
c
[4, [1, 99, 3], 6]
b
[4, [1, 99, 3], 6]
또 같아져 버린다.(copy로 할때도 동일)
3. deep copy로 완벽 복사하여 해결
a = [1, 2, 3]
b = [4, a, 6]
b
[4, [1, 2, 3], 6]
c = copy.deepcopy(b)
c
[4, [1, 2, 3], 6]
a[1] = 99
c
[4, [1, 2, 3], 6]
b
[4, [1, 99, 3], 6]
이렇게 deep copy로 해결할 수 있다.