프로그래밍Python 개발자

Python에서 얕은 복사(shallow copy)와 깊은 복사(deep copy)의 차이점을 설명하세요. 중첩 데이터 구조를 올바르게 복사하는 방법은 무엇인가요? copy 모듈은 어떻게 작동하나요?

Hintsage AI 어시스턴트로 면접 통과

답변.

Python에서 객체 복사는 **얕은 복사(shallow copy)**와 **깊은 복사(deep copy)**로 나눌 수 있습니다. 얕은 복사는 새로운 컨테이너를 생성하지만 중첩 객체는 복사되지 않고 동일한 객체에 대한 참조가 사용됩니다. 깊은 복사는 모든 중첩 객체의 새로운 복사를 재귀적으로 생성하여 복사의 독립성을 보장합니다.

copy 모듈은 copy() (얕은 복사) 및 deepcopy() (깊은 복사) 메소드를 제공합니다:

import copy original = [[1, 2], [3, 4]] shallow = copy.copy(original) deep = copy.deepcopy(original) shallow[0][0] = 99 print(original) # [[99, 2], [3, 4]] ← 원래 객체가 변경됨! deep[1][1] = 42 print(original) # [[99, 2], [3, 4]] - 변경되지 않음

트랩 질문.

list2 = list1 연산자와 copy.copy(list1) 사용의 차이점은 무엇인가요?

답변: list2 = list1 연산자는 동일한 객체에 대한 새로운 참조를 생성합니다. copy.copy(list1)은 새로운 목록 객체를 생성하지만 동일한 내부 객체를 사용하여 얕은 복사를 수행합니다. 중첩 구조의 경우에는 얕은 복사로는 충분하지 않으며 깊은 복사가 필요합니다.

주제에 대한 미세한 차이를 모르는 것으로 인한 실제 오류 사례.


이야기

REST API를 개발하는 과정에서 데이터가 일반 할당(data = template)을 통해 복사되었습니다. 이후 요청이 "템플릿"을 모든 사용자에게 변경하여 동일한 참조가 사용되었기 때문에 우연히 수정되었습니다.


이야기

보고서 모듈에서는 copy.copy()를 통해 데이터를 복사했지만 구조가 중첩되어 있었습니다(사전 내의 목록). 복사본에서의 수정이 원본 데이터에 예기치 않게 반영되어 통계 오류를 발생시켰습니다.


이야기

한 은행 프로젝트에서 copy.copy()(아니면 deepcopy())를 통해 복잡한 중첩 객체의 부정확한 복사로 인해 거래 기록이 손실되었습니다. 새로운 작업이 이전 작업을 덮어쓰게 되었고, 중첩 요소가 공유되었기 때문입니다.