Python - 딕셔너리 복사

안녕하세요, 자신을 표방하는 Python 프로그래머 여러분! 오늘은 Python에서 딕셔너리 복사의 흥미로운 세계에 빠지러 갈 거예요. 여러분의 친절한 이웃 컴퓨터 과학 선생님으로서, 여러분을 이 여정을 안내해 드리게 되어 기쁩니다. 딕셔너리를 마법의 레시피 책으로 상상해보세요. 그것을 복제할 수 있습니다. 재미있지 않을까요? 시작해보죠!

Python - Copy Dictionaries

딕셔너리 복사

Python에서 딕셔너리는 키-값 쌍을 저장하는 매우 유용한 데이터 구조입니다. 그러나 딕셔너리를 복사하고 싶을 때는 어떻게 되죠? 여기서 마법이 시작됩니다!

왜 딕셔너리를 복사할까요?

'어떻게' 먼저 뛰어넘기 전에 '왜'를 이해해 보죠. 여러분에게는 즐겨찾는 쿠키 레시피(우리의 딕셔너리)가 있고, 친구에게 공유하고 싶은데요. 여러분은 그들에게 원본 레시피 책을 주 수 있지만, 그들이 진한 후추를 초콜릿_CHIP 쿠키에 추가할까봐요? 이쯤 되면! 그래서 우리는 복사본을 만듭니다 - 원본을 안전하게 보관하면서 복사본에 수정을 허용합니다.

이제, Python에서 딕셔너리를 복사하는 다양한 방법을 살펴보겠습니다.

얇은 복사

얇은 복사는 새로운 딕셔너리를 만들지만, 값은 원래 딕셔너리의 값에 대한 참조입니다. 이는 레시피 책의 목차를 포토카피하는 것과 마찬가지입니다 - 새로운 책을 가지게 되지만, 여전히 원래 레시피에 가리킵니다.

이를 action에서 볼 수 있습니다:

original_dict = {"apple": 1, "banana": 2, "cherry": [3, 4, 5]}
shallow_copy = original_dict.copy()

print("Original dictionary:", original_dict)
print("Shallow copy:", shallow_copy)

# 얇은 복사를 수정합니다
shallow_copy["apple"] = 10
shallow_copy["cherry"][0] = 30

print("\nAfter modification:")
print("Original dictionary:", original_dict)
print("Shallow copy:", shallow_copy)

Output:

Original dictionary: {'apple': 1, 'banana': 2, 'cherry': [3, 4, 5]}
Shallow copy: {'apple': 1, 'banana': 2, 'cherry': [3, 4, 5]}

After modification:
Original dictionary: {'apple': 1, 'banana': 2, 'cherry': [30, 4, 5]}
Shallow copy: {'apple': 10, 'banana': 2, 'cherry': [30, 4, 5]}

'apple' 값의 변경은 오직 얇은 복사에 영향을 미치지만, 'cherry' 목록의 수정은 두 딕셔너리에 모두 영향을 미칩니다. 이는 목록이 가변이며, 두 딕셔너리가 같은 목록 객체를 참조하기 때문입니다.

깊은 복사

깊은 복사는 새로운 딕셔너리를 만들고, 값의 새로운 복사본을 만듭니다. 이는 전체 레시피 책을 손으로 다시 쓰는 것과 마찬가지입니다 - 모든 것이 새로운이고 독립적입니다.

깊은 복사를 만들기 위해 copy 모듈을 임포트해야 합니다:

import copy

original_dict = {"apple": 1, "banana": 2, "cherry": [3, 4, 5]}
deep_copy = copy.deepcopy(original_dict)

print("Original dictionary:", original_dict)
print("Deep copy:", deep_copy)

# 깊은 복사를 수정합니다
deep_copy["apple"] = 10
deep_copy["cherry"][0] = 30

print("\nAfter modification:")
print("Original dictionary:", original_dict)
print("Deep copy:", deep_copy)

Output:

Original dictionary: {'apple': 1, 'banana': 2, 'cherry': [3, 4, 5]}
Deep copy: {'apple': 1, 'banana': 2, 'cherry': [3, 4, 5]}

After modification:
Original dictionary: {'apple': 1, 'banana': 2, 'cherry': [3, 4, 5]}
Deep copy: {'apple': 10, 'banana': 2, 'cherry': [30, 4, 5]}

차이를 보셨나요? 깊은 복사에서 'cherry' 목록을 복사본에서 수정하면 원래 딕셔너리에 영향을 미치지 않습니다.

copy() 메서드를 사용하여 딕셔너리 복사

copy() 메서드는 내장 딕셔너리 메서드로 얇은 복사를 만듭니다. 이는 우리가 이전에 언급한 포토카피 기계와 마찬가지로 - 빠르고 쉽지만, 얇은 복사와 같은 제한이 있습니다.

이렇게 사용하면 됩니다:

original_dict = {"apple": 1, "banana": 2, "cherry": [3, 4, 5]}
copy_dict = original_dict.copy()

print("Original dictionary:", original_dict)
print("Copied dictionary:", copy_dict)

# 복사본을 수정합니다
copy_dict["apple"] = 10
copy_dict["cherry"][0] = 30

print("\nAfter modification:")
print("Original dictionary:", original_dict)
print("Copied dictionary:", copy_dict)

Output:

Original dictionary: {'apple': 1, 'banana': 2, 'cherry': [3, 4, 5]}
Copied dictionary: {'apple': 1, 'banana': 2, 'cherry': [3, 4, 5]}

After modification:
Original dictionary: {'apple': 1, 'banana': 2, 'cherry': [30, 4, 5]}
Copied dictionary: {'apple': 10, 'banana': 2, 'cherry': [30, 4, 5]}

보시다시피, 동작은 우리의 첫 번째 얇은 복사 예제와 같습니다.

딕셔너리 복사 방법 비교

다양한 방법을 손쉽게 표로 정리해보겠습니다:

Method Type of Copy Syntax Nested Objects
Assignment (=) Reference new_dict = original_dict Shared
copy() Shallow new_dict = original_dict.copy() Shared
dict() Shallow new_dict = dict(original_dict) Shared
deepcopy() Deep new_dict = copy.deepcopy(original_dict) Independent

기억해주세요, 올바른 복사 방법을 선택하는 것은 여러분의 구체적인 필요에 따라 다릅니다. 단순한 딕셔너리를 작업할 때는 얇은 복사가 충분할 수 있습니다. 하지만 중첩 구조를 다루고 완전한 독립성이 필요할 때는 깊은 복사를 선택하세요.

결론적으로, Python에서 딕셔너리를 복사하는 것은 여러분의 즐겨찾는 레시피를 복제하는 것과 같습니다. 때로는 빠르게 참조할 필요가 있고(얇은 복사), 때로는 완전히 새로운 코피북을 만들어야 할 때도 있습니다(깊은 복사). 선택은 여러분의 것입니다, 어린 Pythonista!

이제, 여러분 스스로 이 메서드들을 시도해 보시겠어요? 여러분 자신의 딕셔너리 "레시피 책"을 만들고, 다양한 복사 기술을 실험해 보세요. 코딩 잘하시고, 여러분의 딕셔너리가 항상 완벽하게 복사되시길 바랍니다!

Credits: Image by storyset