카테고리 없음
객체 복사
AlgoPoolJa
2021. 1. 25. 01:40
파이썬의 중요한 특징은 모든 것이 객체라는 점이다. 심지어 숫자, 문자 까지도 모두 객체이다. 숫자, 문자가 리스트. 딕셔너리 같은 객체와의 차이점이라면 불변 객체라는 차이뿐이다. 그러다 보니 별도로 값을 복사하지 않는 한변수에 값을 할당하는 모든 행위는 값 객체에 대한 참조가 된다. 이 말은 참조가 가리키는 원래의 값을 변경하면 모든참조, 즉 모든 변수의 값 또한 함께 변경된다는 말이다.
그렇다면 참조가 되지 않도록 값 자체를 복사 하려면 어떻게 해야할까? 바로 [:]로 처리하는 것이다.
[:]로 처리한 변수 c는 다른 ID를 갖는 것을 확인 할 수 있다. 참조로 처리된 변수 b는 a와 동일한 ID를 갖지만 변수 c는 값 자체가 복사되어 새로운 개체가 되었다. 이외에도 좀 더 직관적으로 처리 하는 방법은 다음과 같이 명시적으로 copy 메소드를 사용하는 것이다.
이 경우 변수 d 또한 다른 ID를 갖는다. 값이 복사되어 새로운 객체가 되었다. 이 처럼 단순한 리스트는 [:]와 copy로도 충분하지만 복잡한 리스트의 경우 안의 list는 같은 주소값을 갖는 문제점이 발생한다.
따라서 이와 같은 얇은 복사를 방지하기 위해 copy.deepcopy를 사용하면 복잡하게 중첩된 리스트도 문제 없이 복사된다.