훈훈훈
파이썬 : 얕은 복사와 깊은 복사 본문
# 단순 복사
단순 복사의 개념은 단순하다, 값을 그냥 대입하는 것을 말한다.
위 코드와 같이 가변 객체를 생성 후 단순히 값을 대입한 결과 두 객체 모두 값이 변화가 발생한 것을 알 수 있다.
그 원인은 ID 값을 확인해보면 알 수 있다. 위 코드를 보면 list1, list2 모두 같은 ID 값을 참조하고 있는 것을 알 수 있다.
즉, list2 = list1 과 같이 단순 복사는 객체 복사가 이루어지는 것이 아닌 단순히 같은 메모리 공간을 참조한다는 것을 알 수 있다.
# 얕은 복사(Shallow Copy)
단순 복사의 문제점을 해결하기 위해 얕은 복사라는 개념을 사용할 수 있다.
얕은 복사를 사용하면 값을 참조하는 것이 아닌 복사를 할 수 있다.
얕은 복사는 아래 코드와 같이 리스트를 슬라이싱(ex. list1 = list2[:]) 하거나 copy라는 모듈을 사용하여 할 수 있다.
하지만 얕은 복사에도 문제점이 존재한다.
위 코드와 같이 list1에 대한 객체의 복사는 이루어졌지만 list1 안의 요소 중 [1,2,3]는 복사가 아닌 참조가 이루어진 것을 알 수 있다.
정리하자면, list1 객체는 복사가 이루어진 것이 맞지만 그 안의 각각의 요소들은 복사가 되지 않을 것을 알 수 있다.
# 깊은 복사(Deep Copy)
위와 같은 얕은 복사를 해결하기 위해 깊은 복사의 개념을 사용할 수 있다.
깊은 복사는 겉의 객체 뿐만 아니라 객체에 담긴 모든 것을 새롭게 복사하며, 복사 대상 객체와는 전혀 다른 객체가 생성된다.
위 코드와 같이 깊은 복사 개념을 사용 시 리스트안의 요소들까지 모두 복사가 이루어진 것 을 알 수 있다.
'파이썬 > Python' 카테고리의 다른 글
파이썬 : Non-default argument와 Default argument (0) | 2020.01.29 |
---|---|
파이썬 : 스코프(유효 범위)와 클로저 (2) | 2020.01.17 |
파이썬 : 가변 객체와 불변 객체 (0) | 2020.01.13 |
파이썬 : 텔레그램 봇(Telegram Bot) 만들기 (0) | 2020.01.09 |
파이썬: 데코레이터를 이용한 시간 측정 (0) | 2019.12.11 |