python deep copy문제

Developer:Bird·2021년 11월 25일
0

파이썬의 deepcopy는 c++, c에서의 copy와는 질적으로 차이가 있다. c,c++ 에서는 deepcopy는 assign operator로 이루어지고, 이때 주소값은 변하지 않고 값만 변하게 되는데, 파이썬의 copy.deepcopy()의 경우 새로운 주소값과 함께 객체가 생성되게 되고 참조를 변경하는 방식으로 할당이 일어나게 된다. 따라서 다음과 같은 상황을 주의 해야한다.

import copy
a = [1,2,3,4]
print('처음 a의 id는 {} 입니다. 값은 {}입니다.'.format(id(a),a))
def func(a):
    temp = [2, 3, 4, 5]
    print('함수내의 a의 id는 {} 입니다.'.format(id(a)))
    a = copy.deepcopy(temp)
    print('함수내에서 deep copy한후 a의 id는 {} 입니다. a의 값은 {}입니다.'.format(id(a),a))
func(a)
print('함수 실행이후 a의 id는 {} 입니다. 값은 {}입니다.'.format(id(a),a))


결과를 보게 되면, 함수내에서 a가 참조하는 주소값은 변하였지만, 외부에서 a가 가르키고 있는 주소값은 그대로이다. 따라서 함수내에서 인자로 collection을 받아서 copy할때는 주의해야한다.

profile
끈임없이 발전하자.

0개의 댓글