약한 복사와 깊은 복사

2023. 4. 12. 11:09개발/토막난 상식

반응형

객체 또는 변수의 복사 방법을 설명하는 용어

 

  1. 약한 복사(Shallow Copy 또는 Shallow Copying): 약한 복사는 원본 객체 또는 변수의 주소를 복사하여 새로운 객체 또는 변수를 생성하는 것을 말합니다. 즉, 원본과 복사본은 같은 객체를 참조하게 됩니다. 이 경우, 복사본의 변경이 원본에 영향을 미칠 수 있습니다. 원본과 복사본은 동일한 내용을 가지지만, 두 개의 객체가 독립적으로 존재하는 것이 아니라 원본과 복사본이 같은 객체를 공유하게 됩니다.

예를 들어, 리스트 객체의 경우 약한 복사를 수행하면 두 개의 리스트가 같은 원소를 참조하게 됩니다. 따라서 한 리스트를 변경하면 다른 리스트도 동일한 변경이 반영됩니다.

 

original_list = [1, 2, 3, 4, 5]
shallow_copy_list = original_list.copy()  # 약한 복사

original_list[0] = 10
print(original_list)  # 출력: [10, 2, 3, 4, 5]
print(shallow_copy_list)  # 출력: [1, 2, 3, 4, 5] (변경되지 않음)
  1. 깊은 복사(Deep Copy 또는 Deep Copying): 깊은 복사는 원본 객체 또는 변수와 그에 속한 객체들까지 모두 복사하여 새로운 객체 또는 변수를 생성하는 것을 말합니다. 원본과 복사본은 완전히 독립적인 객체로 동작하므로 한 객체를 변경하더라도 다른 객체에는 영향을 미치지 않습니다.

예를 들어, 리스트 객체의 경우 깊은 복사를 수행하면 두 개의 리스트가 서로 독립적인 객체가 됩니다. 따라서 한 리스트를 변경하더라도 다른 리스트에는 영향을 미치지 않습니다.

 

import copy

original_list = [1, 2, 3, 4, 5]
deep_copy_list = copy.deepcopy(original_list)  # 깊은 복사

original_list[0] = 10
print(original_list)  # 출력: [10, 2, 3, 4, 5]
print(deep_copy_list)  # 출력: [1, 2, 3, 4, 5] (변경되지 않음)

약한 복사와 깊은 복사는 객체 또는 변수의 복사 방법에 따라 원본과 복사본이 서로 다른 동작을 보입니다. 약한 복사는 원본과 복사본이 같은 객체를 참조하게 되어, 한 객체를 변경하면 다른 객체에도 영향을 미칠 수 있습니다. 반면에 깊은 복사는 원본과 복사본이 완전히 독립적인 객체로 동작하여, 한 객체를 변경하더라도 다른 객체에는 영향을 미치지 않습니다.

반응형