TIL | 파이썬 copy 와 deepcopy
2차원 리스트를 공부하다 나온 deepcopy
와 copy
의 차이를 알아보자!
우선하여 알면 좋은 가변(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 함수를 사용하여 깊은 복사
이렇게 깊게 복사 된 객체는 처음에 만들었던 객체와 복사된 객체가 완전히 달라지기 때문에
어느 한쪽을 수정한다고 해서 다른 한쪽이 영향받지 않는다.
Author And Source
이 문제에 관하여(TIL | 파이썬 copy 와 deepcopy), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@ttakku-park/TIL-파이썬-copy-와-deepcopy저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)