훈훈훈

파이썬 : 얕은 복사와 깊은 복사 본문

파이썬/Python

파이썬 : 얕은 복사와 깊은 복사

훈훈훈 2020. 1. 13. 19:11

# 단순 복사

단순 복사의 개념은 단순하다, 값을 그냥 대입하는 것을 말한다. 

위 코드와 같이 가변 객체를 생성 후 단순히 값을 대입한 결과 두 객체 모두 값이 변화가 발생한 것을 알 수 있다.

그 원인은 ID 값을 확인해보면 알 수 있다. 위 코드를 보면 list1, list2 모두 같은 ID 값을 참조하고 있는 것을 알 수 있다.

즉, list2 = list1 과 같이 단순 복사는 객체 복사가 이루어지는 것이 아닌 단순히 같은 메모리 공간을 참조한다는 것을 알 수 있다.

 

# 얕은 복사(Shallow Copy) 

단순 복사의 문제점을 해결하기 위해 얕은 복사라는 개념을 사용할 수 있다.

얕은 복사를 사용하면  값을 참조하는 것이 아닌 복사를 할 수 있다.

얕은 복사는 아래 코드와 같이 리스트를 슬라이싱(ex. list1 = list2[:]) 하거나 copy라는 모듈을 사용하여 할 수 있다.

하지만 얕은 복사에도 문제점이 존재한다. 

위 코드와 같이 list1에 대한 객체의 복사는 이루어졌지만 list1 안의 요소 중 [1,2,3]는  복사가 아닌 참조가 이루어진 것을 알 수 있다.

정리하자면, list1 객체는 복사가 이루어진 것이 맞지만 그 안의 각각의 요소들은 복사가 되지 않을 것을 알 수 있다. 

 

# 깊은 복사(Deep Copy)

위와 같은 얕은 복사를 해결하기 위해 깊은 복사의 개념을 사용할 수 있다.

깊은 복사는 겉의 객체 뿐만 아니라 객체에 담긴 모든 것을 새롭게 복사하며, 복사 대상 객체와는 전혀 다른 객체가 생성된다.

위 코드와 같이 깊은 복사 개념을 사용 시 리스트안의 요소들까지 모두 복사가 이루어진 것 을 알 수 있다.

Comments