파이썬에서는 객체의 복사본을 만드는 깊은 복사와 얕은 복사 두 가지 방법이 있다. 깊은 복사는 객체와 그 내부의 모든 객체를 완전히 새롭고 독립적인 복사본으로 생성하는 반면, 얕은 복사는 원본 객체의 내용을 참조하는 새로운 객체를 생성한다. 이러한 차이점은 한 객체에 대한 변경이 다른 객체에 어떻게 영향을 미치는지에 영향을 준다.
이 포스트에서는 파이썬에서 깊은 복사와 얕은 복사를 자세히 살펴보고, 리스트, 사전, 문자열, 정수와 같은 객체를 사용하여 이러한 두 유형의 복사를 비교한다.
copy
모듈을 이용한 방법파이썬은 객체의 깊은 복사본을 생성하는 deepcopy
메서드를 포함하는 copy
모듈을 제공한다.
import copy
original_list = [1, [2, 3], [4, 5]]
deep_copied_list = copy.deepcopy(original_list)
deep_copied_list[1][0] = '변경됨'
print(original_list) # Output: [1, [2, 3], [4, 5]]
위 코드 조각은 deepcopy
메서드를 사용하여 깊은 복사본을 생성하는 방법을 보여준다. deep_copied_list
에 대한 변경은 original_list
에 영향을 미치지 않는다.
copy
메서드를 이용한 방법copy
모듈의 copy
메서드 또는 객체의 내장 복사 기능을 사용하여 얕은 복사본을 만들 수 있다.
import copy
original_dict = {'a': [1, 2], 'b': [3, 4]}
shallow_copied_dict = copy.copy(original_dict)
shallow_copied_dict['a'][0] = '변경됨'
print(original_dict) # Output: {'a': ['변경됨', 2], 'b': [3, 4]}
이 코드 조각은 얕은 복사본에 대한 변경이 원본 객체의 내용을 참조하므로 original_dict
에 반영된다는 것을 강조한다.
파이썬에서는 리스트, 사전, 문자열, 정수와 같은 다양한 유형의 객체에서 깊은 복사와 얕은 복사를 수행할 수 있다. 이러한 복사 방법의 동작은 Mutable 타입과 Immutable 타입 사이에 차이가 있다.
import copy
original_list = [1, [2, 3], [4, 5]]
deep_copied_list = copy.deepcopy(original_list)
original_list = [1, [2, 3], [4, 5]]
shallow_copied_list = original_list.copy()
shallow_copied_list[1][0] = '변경됨'
print(original_list) # Output: [1, ['변경됨', 3], [4, 5]]
리스트의 경우 깊은 복사는 완전히 독립된 복사본을 생성하는 반면, 얕은 복사는 중첩된 객체에 대한 공유 참조를 생성한다.
import copy
original_dict = {'a': [1, 2], 'b': [3, 4]}
deep_copied_dict = copy.deepcopy(original_dict)
original_dict = {'a': [1, 2], 'b': [3, 4]}
shallow_copied_dict = original_dict.copy()
shallow_copied_dict['a'][0] = '변경됨'
print(original_dict) # Output: {'a': ['변경
됨', 2], 'b': [3, 4]}
사전의 경우, 깊은 복사는 완전히 새로운 객체를 생성하는 반면, 얕은 복사는 중첩된 객체에 대한 참조를 결과로 한다.
original_str = "text"
deep_copied_str = copy.deepcopy(original_str)
original_int = 42
deep_copied_int = copy.deepcopy(original_int)
original_str = "text"
shallow_copied_str = copy.copy(original_str)
original_int = 42
shallow_copied_int = copy.copy(original_int)
문자열과 정수는 변경할 수 없으므로 얕은 복사와 깊은 복사는 동일한 방식으로 동작하여 완전히 새로운 객체를 생성한다.
객체 유형 | 깊은 복사 | 얕은 복사 | Mutable / Immutable |
---|---|---|---|
리스트 | 독립적인 복사본 생성 | 중첩된 객체에 대한 공유 참조 | Mutable |
사전 | 독립적인 복사본 생성 | 중첩된 객체에 대한 공유 참조 | Mutable |
문자열 | 독립적인 복사본 생성 | 독립적인 복사본 생성 | Immutable |
정수 | 독립적인 복사본 생성 | 독립적인 복사본 생성 | Immutable |
파이썬에서 복잡한 데이터 구조를 효과적으로 다루기 위해서는 객체가 어떻게 복사되고 참조되는지를 이해하는 것이 중요하다. 이는 객체가 복제되고 참조되는 방식에 대한 정확한 제어를 제공하며, 보다 정확하고 효율적인 코드를 구성하는 데 도움이 된다.
파이썬에서 복잡한 데이터 구조를 조작하는 데 있어 깊은 복사와 얕은 복사의 차이를 이해하는 것은 중요하다. 객체가 복제되고 참조되는 방식에 대한 정확한 제어를 가능하게 하여 더 간결하고 효율적인 코딩 방식을 가능하게 한다.
copy
모듈의 deepcopy
메서드를 사용한다.[Python] 비트 연산자 다양한 예제를 통해 이해하기 |
---|
[Python] 관계 연산자 다양한 예제를 통해 이해하기 |
[Python] 'zsh: command not found: python' 오류 해결하기 |
[Python] 할당 연산자 다양한 예제를 통해 이해하기 |
[Python] 산술 연산자 다양한 예제를 통해 이해하기 |
CloneCoding
한 줄의 코드에서 시작되는 혁신!