파이썬 딥카피 하는 방법은 아래와 같이 간단합니다. 

import copy
new_list = copy.deepcopy(old_list)

 

deepcopy 테스트를 위해서 아래 코드를 보시죠.

 

import copy


old_list = [1,2,3,4]
print "old_list: {0}, old_list_hex: {1}".format(old_list, hex(id(old_list)))

new_list = old_list
print "new_list: {0}, new_list_hex: {1}".format(new_list, hex(id(new_list)))

new_list[0] = 100000
print "new_list: {0}, new_list_hex: {1}".format(new_list, hex(id(new_list)))
print "old_list: {0}, old_list_hex: {1}".format(old_list, hex(id(old_list)))






deep_old_list = [1,2,3,4]
print "deep_old_list: {0}, deep_old_list_hex: {1}".format(deep_old_list, hex(id(deep_old_list)))

deep_new_list = copy.deepcopy(old_list)
print "deep_new_list: {0}, deep_new_list_hex: {1}".format(deep_new_list, hex(id(deep_new_list)))

deep_new_list[0] = 999999
print "deep_new_list: {0}, deep_new_list_hex: {1}".format(deep_new_list, hex(id(deep_new_list)))
print "deep_old_list: {0}, deep_old_list_hex: {1}".format(deep_old_list, hex(id(deep_old_list)))

 

결과는 아래와 같습니다. 

 

그냥 변수를 입력해서 new_list를 만들면 메모리 주소 값이 같습니다. 

그래서 new_list를 수정하면 old_list도 변경이 되죠. 이유는 메모리 주소 값이 같아서 같은 곳을 바라보고 있으니까 말이죠.

 

deep_copy 한 경우에 deep_old_list와 deep_new_list는 메모리 주소 값이 다릅니다.

따라서 deep_new_list를 수정해도 deep_old_list 값은 변경이 없죠. 이유는 메모리 주소 값이 다르기 때문입니다. 

 

복사해서 사용하지만 독립적으로 사용하기 위해서는 deep copy를 하셔야겠죠.

간단하게 테스트 코드와 결과로 deep copy를 확인해봤습니다. 

끝 !

+ Recent posts