[파이썬]copy 모듈의 고찰


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로 해결할 수 있다.




© 2018. by statssy

Powered by statssy