[Python] 기초 - 할당 vs 얕은 복사 vs 깊은 복사

ITmakesmeSoft·2022년 9월 3일
0

PYTHON [BASIC]

목록 보기
13/13
post-thumbnail

할당 vs 얕은 복사 vs 깊은 복사

  • 할당(Assignment)
    • 대입 연산자를 통한 복사는 해당 객체의 주소(id)값을 복사하는 개념임.

    • 따라서, 해당 주소를 복사한 다른 리스트의 일부 값을 변경할 경우, 이를 참조하는 모든 변수에 영향을 줌.

      original_list = [1,2,3]
      copy_list = original_list
      print(original_list, copy_list)
      
      copy_list[0] = 'hello'
      print(original_list, copy_list) 
      #['hello', 2, 3] ['hello', 2, 3]
  • 얕은 복사(Shallow copy)
    • slice 연산자를 활용하여 같은 원소를 가진 새로운 리스트를 생성하는 방식

      a = [1, 2, 3]
      b = a[:]
      print(a, b) # [1, 2, 3] [1, 2, 3]
      b[0] = 5
      print(a, b) # [1, 2, 3] [5, 2, 3]
      📢 복사하는 리스트의 원소가 주소를 참조하는 경우 즉, 이차원 이상의 배열인 경우, 리스트 원소 내의 리스트는 마찬가지로 주소를 참조하게 되어, 영향을 받을 수 있음.
      a = [1, 2, [1, 2, 3]]
      b = a[:]
      print(a, b) # [1, 2, [1, 2, 3]] [1, 2, [1, 2, 3]]
      b[2][0] = 5
      print(a, b) # [1, 2, [5, 2, 3]] [1, 2, [5, 2, 3]]
  • 깊은 복사(Deep copy)
    • 만일 중첩된 상황에서 복사를 하고 싶다면, **깊은 복사(deep copy)**를 해야 함.

    • 깊은 복사는 새로운 객체를 만들고 원본 객체 내에 있는 객체에 대한 복사를 재귀적으로 삽입

    • 단, 깊은 복사를 하기 위해서는 copy 모듈의 deepcopy 메서드 필요.

      import copy
      a = [1, 2, [1, 2, 3]]
      b = copy.deepcopy(a)
      print(a, b) # [1, 2, [1, 2, 3]] [1, 2, [1, 2, 3]]
      b[2][0] = 5
      print(a, b) # [1, 2, [1, 2, 3]] [1, 2, [5, 2, 3]]
profile
💎 Daniel LEE | SSAFY 8th

0개의 댓글