본문 바로가기

개발자 레니는 지금 -/소프트웨어와 함께

[ Python ] 복사의 늪에서 벗어나자, 얕은 복사 vs 깊은 복사 vs 걍 복사


Python

Shallow copy / Deep copy / Copy

#Ubuntu 16.04 LTS

#Python 3.5.2


#>> 상세 설명,  실행화면

코드 동작을 시켜보고 싶으신 분은 아래 참조내용에 1. GitHub에 가셔서 코드를 다운 받아서 "main.py"를 실행 시키세요 :)



1. Copy 단순 복사

단순 객체의 복사는 그냥 같은 객체 주소를 가르킨다고 생각하시면 됩니다.

둘 중에 하나를 수정하면 원래의 내용도 수정된다고 생각하면 되요.



= 그냥 객체 자체를 복사했다고 생각하시면 됩니다.


2. Shallow copy


copy.copy(value_name)

얕은 복사 같은 경우에는 굳이 copy module 을 쓰지 않더라도 자체에 키워드가 있기도 합니다.


즉, dict.copy() = copy.copy(dict) 은 같은 동작을 합니다.


단순 복사와의 차이는 틀(껍데기)만 복사하기 때문에 객체의 주소값이 바뀐다는 것 입니다.

따라서 copy 후에 제가 값을 변경하면 주소가 참조 되는 변경이 가능한 변수들은 여전히 값의 변경이 공유됩니다.



내부에 생성된 리스트, 딕셔너리와 같은 변경 가능한 객체는 수정을 해도 주소 값이 변경 되는 것이 아니기 때문에 바뀐 값이 공유됩니다.


3. Deep copy


copy.deepcopy(value_name)


단순 복사, 얕은 복사와의 차이는 내부에 생성된 변수, 객체들 까지도 다른 주소값을 가진다는 것입니다.

틀 뿐만 아니라 데이터 자체를 복사해서 새로 만든다고 생각하시면 됩니다.



내부에 생성된 리스트, 딕셔너리 마저도 새로 주소를 생성해서 복사하기 때문에 바뀐 값이 공유되지 않습니다.





#2018년07월13일