https://github.com/LeeHyungSeop/Python-Syntax/blob/main/Intermediate/03_deep_shallow_copy.ipynb
v1 == v2
: 변수 v1과 v2가 reference하는 object의 값이 같은가?v1 is v2
: 변수 v1과 v2가 reference하는 object는 동일한 object인가?r2 = list(r1)
위와 같은 복사를
Shallow Copy
라고 한다.
Shallow Copy
는 Python이 복사를 진행하는 기본 방식이다.Shallow Copy
를 해도 문제가 되지 않는다.Shallow Copy
를 하면 문제가 될 수 있다.정리하면 immutable object는 Shallow Copy
를 해도 문제가 되지 않지만, mutable object는 문제가 될 수 있다.
아래 예제를 보자
John은 해가 지날수록 나이를 먹는다.
그래서 위의 예시에서는 2021년도 John의 정보를 복사하여 2022년도 John의 정보를 만들었다.
그런데 Shallow Copy로 인해 2022년 John의 나이를 먹이면 2021년도 John의 나이도 먹게 된다.
이렇듯 mutable object에 저장된 값들은 변경될 수 있기 때문에
이들에 대해서는 복사 대상을 하나 더 생성하는 Deep Copy
를 사용해야 한다.
아래 그림과 같이 immutable object인 string('John')과 tuple(('man', 'USA'))는 Shallow Copy,
mutable object인 list([175, 23])는 Deep Copy를 사용하는 것이 의도에 맞는 프로그래밍이다.
또한 안정성과 성능을 모두 고려하여 Deep Copy를 사용하는 것이 좋다.
Deep Copy
는 copy
모듈의 deepcopy
함수를 사용한다.
python은 memory를 효율적으로 사용하기 위해 '선한 거짓말'을 하고 있다.
그러나 immutable object에 대한 상황에서는 문제가 없기 때문에 속아줘도 된다.
단, mutable object에 대해서는 deepcopy를 사용해야 프로그래밍 의도에 맞게 안전하게 복사할 수 있다.