TIL | 파이썬 copy 와 deepcopy

박지우·2021년 4월 28일
0

TIL

목록 보기
6/7
post-thumbnail

2차원 리스트를 공부하다 나온 deepcopycopy 의 차이를 알아보자!

우선하여 알면 좋은 가변(mutable)객체

아마 2차원 리스트 전까지 순차적으로 공부하신 분들은
시퀀스 객체나 set, dict 등을 학습하며
pop 이나 remove , del , 요소추가 등의 메서드로 수정,삭제가 불가능한 객체들을 확인했을텐데

쉽게 생각하자면 여기서 수정,삭제가 가능한 객체들을 가변(mutable)객체라고 한다.

가변(mutable)객체란?

객체에 할당 된 값을 수정할 수 있는 특징을 가진 객체

가변객체의 타입은?

list , set , dict 가 있다.

불변(immutable)객체는?

가변객체와 반대되는 특성으로 수정, 삭제가 불가능한 객체를 불변 객체라고한다.

불변(immutable)객체란?

객체에 할당된 값을 수정 할 수 없는 특징을 가진 객체

불변객체의 타입은?

int,float,bool,str,tuple,frozenset 등이 존재한다.

copy

일반적으로 list 에 copy 메서드를 이용해 새로운 변수에 복사 하는 것과 다르게

a = [[1,1],[2,2]] # 2차원리스트

b = [1,2,[3,4,5]] # 내부리스트

가변객체 리스트의 2차원리스트와 내부리스트의 경우 리스트객체의 내부 리스트객체까지 복사가 되지 않는다.
copy의 경우 리스트만 복사가 되고 그안의 내용은 동일한 객체를 참조하기 때문이다.

copy 메서드 사용에서 가변객체와 불변객체의 차이

불가변 객체의 경우 복사한 값으로 재할당을 할 경우 기존객체와 복사한 객체는 전혀다른 값이 된다.

가변객체는 내부리스트가 존재 할 때 내부리스트의 값은 복사가 아닌 참조가 일어나기 때문에 값을 할당 하게 되면 기존의 리스트에도 변경이 이루어진다.

deepcopy

mutable 한 내부객채들이 복사되지 않는 문제를 해결하기 위해서는 deepcopy를 해야한다.

deepcopy의 경우 복합 객체를 새롭게 생성하고 그 안의 내용까지 새롭게 생성하게 된다.

import copy #copy 모듈을 가져옴

a=[1,2,[3,4,5]]
b=copy.deepcopy(a) # copy.deepcopy 함수를 사용하여 깊은 복사

이렇게 깊게 복사 된 객체는 처음에 만들었던 객체와 복사된 객체가 완전히 달라지기 때문에
어느 한쪽을 수정한다고 해서 다른 한쪽이 영향받지 않는다.

profile
Backend developer

0개의 댓글