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 |
반응형
'Study > Python' 카테고리의 다른 글
지수표현 숫자를 python에서 쉽게 읽어드리고 다루기 (0) | 2023.08.24 |
---|---|
python 숫자 표기에서 e없이 출력하는 방법 (0) | 2023.08.24 |
matplotlib에서 3D view의 axis ratio(비율) 조정하기 (0) | 2023.04.21 |
list에서 중복 요소를 효율적으로 확인하는 방법 (0) | 2023.04.21 |
matplotlib에서 임의의(random) color 자동 생성하기 : hex string 기반 (0) | 2023.04.21 |