Python 정리

파이썬 - 얕은 복사, 깊은 복사

dawon-project 2025. 2. 6. 18:57

얕은 복사

  • 객체의 최상위(1차원) 요소만 복사
  •  그 안에 포함된 중첩된 객체들(리스트, 딕셔너리, 객체 등)은 복사하지 않고, 원본 객체와 같은 참조를 가진다.
  • 즉, 얕은 복사는 객체의 복사본을 만들지만, 그 내부 요소들은 여전히 원본 객체와 연결되어 있기 때문에 중첩된 객체를 변경하면 원본 객체와 복사본이 모두 영향을 받는다.  => 대입 연산자를 통한 얕은 복사 제외(주소 공유)
  • copy 모듈을 불러와서 얕은 복사를 할 경우 -> 모든 객체에 사용가능한 함수

=> 딕셔너리의 Value로 기본 자료형(1차원 요소)을 주었기 때문에 영향 받지 않음

=> 딕셔너리 안의 리스트 즉, 중첩된 객체라 영향을 받음

 

  • 또 다른 예시

  • 대입 연산자를 통해서 얕은 복사를 할 경우(= 참조 복사) -> 주소 공유
    • 모든 주소값을 공유하기 때문에 어떤 행위를 하든 영향이 간다.

  • copy()를 사용해서 얕은 복사를 할 경우 -> 리스트 객체에서만 사용가능한 함수

  • list(), dict() 등으로 형변환해서 복사하는 얕은 복사

  • 리스트 슬라이싱을 통한 얕은 복사

 

깊은 복사

  • 깊은 복사는 객체의 전체 구조를 복사한다.
  • 그 안에 포함된 모든 중첩된 객체들까지도 새로운 객체로 복사
  • 깊은 복사를 사용하면 원본 객체와 복사본 객체는 완전히 독립적으로 동작하게 되며, 중첩 객체를 수정해도 서로 영향을 미치지 않는다.
  • copy 모듈을 통해서 deepcopy함수를 사용해서 깊은 복사를 할 경우

  •  재귀적인 깊은 복사