태그된 제품에 대해 수수료를 받습니다.
[파이썬] 딕셔너리(dictionary)
딕셔너리(dictionary)파이썬 딕셔너리(dictionary)는 키(key)와 값(value) 쌍으로 이루어진 자료 구조 딕셔너리는 키를 통해 값을 빠르게 조회할 수 있으며,키는 고유해야 하고 변경할 수 없는 자료형이
gameuiux.tistory.com
딕셔너리를 얕은 복사(shallow copy)한다는 것은 딕셔너리의 구조 자체는 복사하지만,
딕셔너리 내부에 있는 객체들은 원래 딕셔너리와 같은 참조를 가지게 된다는 것을 의미한다.
얕은 복사와 깊은 복사의 차이
1. 얕은 복사 (Shallow Copy)
새로운 딕셔너리가 생성되지만, 원래 딕셔너리에 있는 객체들은 같은 참조를 공유한다.
복사된 딕셔너리에서 값을 변경하면 원래 딕셔너리에도 영향을 미친다.
2. 깊은 복사 (Deep Copy)
딕셔너리와 그 안에 있는 모든 객체들을 재귀적으로 복사하여 완전히 새로운 객체들을 생성한다.
복사된 딕셔너리에서 값을 변경해도 원래 딕셔너리에는 영향을 미치지 않는다.
얕은 복사 예제
import copy
# 원래 딕셔너리
original_dict = {
"name": "Alice",
"age": 30,
"address": {"city": "New York", "zip": "10001"}
}
# 얕은 복사
shallow_copied_dict = original_dict.copy()
# 값 변경
shallow_copied_dict["name"] = "Bob"
shallow_copied_dict["address"]["city"] = "Boston"
print("원래 딕셔너리:", original_dict)
print("얕은 복사된 딕셔너리:", shallow_copied_dict)
원래 딕셔너리: {'name': 'Alice', 'age': 30, 'address': {'city': 'Boston', 'zip': '10001'}}
얕은 복사된 딕셔너리: {'name': 'Bob', 'age': 30, 'address': {'city': 'Boston', 'zip': '10001'}}
위 예제에서 shallow_copied_dict는 얕은 복사를 통해 생성되었다.
name 키의 값을 변경했을 때는 원래 딕셔너리와 얕은 복사된 딕셔너리 각각 다른 값을 가지게 되지만,
address 키 아래의 city 값을 변경했을 때는 원래 딕셔너리와 얕은 복사된 딕셔너리 모두 변경된다.
이는 address 객체가 얕은 복사로 인해 동일한 참조를 공유하기 때문이다.
깊은 복사 예제
import copy
# 원래 딕셔너리
original_dict = {
"name": "Alice",
"age": 30,
"address": {"city": "New York", "zip": "10001"}
}
# 깊은 복사
deep_copied_dict = copy.deepcopy(original_dict)
# 값 변경
deep_copied_dict["name"] = "Bob"
deep_copied_dict["address"]["city"] = "Boston"
print("원래 딕셔너리:", original_dict)
print("깊은 복사된 딕셔너리:", deep_copied_dict)
원래 딕셔너리: {'name': 'Alice', 'age': 30, 'address': {'city': 'New York', 'zip': '10001'}}
깊은 복사된 딕셔너리: {'name': 'Bob', 'age': 30, 'address': {'city': 'Boston', 'zip': '10001'}}
깊은 복사된 딕셔너리에서는 address 객체도 새로 생성되었기 때문에,
한쪽에서 값을 변경해도 다른 쪽에 영향을 미치지 않는다.
따라서, 얕은 복사는 딕셔너리의 구조만 복사하고 내부 객체들은 같은 참조를 가지게 되는 반면,
깊은 복사는 딕셔너리와 그 내부 객체들 모두를 새로 복사하여 완전히 독립적인 객체들을 생성한다.
태그된 제품에 대해 수수료를 받습니다.