Study/Python
변수 값을 복사하여 새로 만들기 (deepcopy)
13.d_dk
2023. 8. 24. 20:03
728x90
반응형
문제의 정의
- 변수를 그냥 할당하여 사용하는 경우 메모리의 값이 같이 참조되어 변수의 값들이 모두 변함
- 이를 해결하기 위해 변수의 값을 완전히 복사한 새로운 객체를 만드는 방법이 필요함
- 아래의 예제와 같이 실행하면 모든 딕셔너리 변수의 값이 변함
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
# Define a nested dictionary
original_dict = {
'key1': 1,
'key2': [2, 3, 4],
'key3': {
'inner_key1': 'a',
'inner_key2': 'b'
}
}
# Perform a copy
new_copy_dict = original_dict
# Modify the copy
new_copy_dict['key1'] = 100
new_copy_dict['key2'][0] = 200
new_copy_dict['key3']['inner_key1'] = 'x'
# Print both the original and the copy
print("Original Dictionary:")
print(original_dict)
print("\nNew Copy Dictionary:")
print(new_copy_dict)
|
cs |
문제 해결 방법
- 단순한 얕은 복사는 새 인스턴스를 생성하지 않고 내부 객체에 대한 참조만 복사함
- python copy module에서 제공하는 copy.deepcopy()를 사용하여 전체 복사본을 만들 수 있음
- copy.deepcopy()는 중첩된 사전(dict), 목록(list) 또는 사용자 정의 객체와 같은 복잡한 데이터 구조의 복사본을 만들 때 특히 유용함
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
import copy
# Define a nested dictionary
original_dict = {
'key1': 1,
'key2': [2, 3, 4],
'key3': {
'inner_key1': 'a',
'inner_key2': 'b'
}
}
# Perform a deep copy
deep_copy_dict = copy.deepcopy(original_dict)
# Modify the deep copy
deep_copy_dict['key1'] = 100
deep_copy_dict['key2'][0] = 200
deep_copy_dict['key3']['inner_key1'] = 'x'
# Print both the original and the deep copy
print("Original Dictionary:")
print(original_dict)
print("\nDeep Copy Dictionary:")
print(deep_copy_dict)
|
cs |
반응형