복사

에스타고어·2023년 4월 28일
0

파이썬

목록 보기
3/3

객체 구분

mutable 객체: 변경가능한 객체

mutable 자료형 : list, set, dictionary

mutable 객체의 경우 얕은 복사를 하게 될 경우 어느 변수 하나가

값을 추가, 변경, 제거할 경우 나머지 변수 또한 따라서 변하게 됨.


immutable 객체 : 변경불가능한 객체

immutable 자료형 : int, float, tuple, str, bool

immutable 객체의 경우 값이 변경되면 '무조건' 참조가 변경되기 때문에

얕은 복사를 하던 깊은 복사를 하던 참조하던 다른 객체의 값이 따라 바뀌지 않음.



결론

파이썬에서는 immutable 객체의 값이 같은 경우에 변수에 상관없이 동일한 곳을 참조

반면, mutable 객체의 경우에는 값이 같더라도 객체를 각각 생성해서 참조

결론적으로 파이썬에서 '얕은 복사'와 '깊은 복사'를 구분하고 학습해야 하는 객체는

int, float와 같은 immutable 객체들이 아니라 list, set, dictionary와 같은

mutable 객체들이다.



얕은 복사 vs 깊은 복사

얕은 복사(참조 복사)

arr1 = [1,2,3]

arr2 = arr1

'=' 연산자를 사용해 복사한 경우를 말하며, 객체의 값을 복사하였다기보다

객체를 '연결'하였다가 적절한 표현임


눈속임 복사

: 값만 복사하는 것처럼 보이나 자료구조 내 자료구조에는 깊은 복사 영향이 못 미쳐 따라 변하는 경우

b = a[:] 표현을 사용하거나 .copy( ) 메서드를 이용하거나

copy 모듈의 copy( ) 함수를 사용하는 방법이 있다.


깊은 복사

copy 모듈의 deepcopy( ) 함수를 사용한다.

변수의 값만 가져오고 다른 메모리 주소를 참조하게 하여 원래 변수가 변하더라도

영향을 받지 않는다. 복사한 이후부터는 독립적인 상태가 된 것을 '깊은 복사'라고 할 수 있다.

profile
아직 Newbie

0개의 댓글