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': [234],
    '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': [234],
    '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
반응형