여니의 프로그래밍 study/파이썬

[#8.1 파이썬 기초] 딕셔너리와 셋

여니's 2021. 1. 5. 09:20

1. 딕셔너리(==딕트)

- 딕셔너리는 리스트와 비슷하지만 다른점이 있다.

항목의 순서를 따지지 않고, 0 또는 1과 같은 오프셋 값으로 항목 선택이 불가하다.

오프셋 값 대신 값에 상응하는 키를 지정한다.

 

- {} 안에 콤마로 구분한 키:값 쌍을 지정한다.

 

- 딕셔너리 생성하기 : dict()

 

 

- 항목 추가/변경 : key

딕셔너리에 항목을 추가하려면 키와 값을 할당해주면 된다.

딕셔너리의 키는 고유한 값을 가져야 한다.

 

- 항목 얻기 : get(0

딕셔너리명.get(키)

>> a라는 키의 값이 딕셔너리내의 존재하지 않을 경우엔

Not a python을 출력

- 모든 키 얻기 : keys()

딕셔너리명.keys()

 

- 모든 값 얻기 : values()

- 모든 키- 값 얻기 : items()

 

- 길이 얻기 : len()

- 결합하기 : update()

- 삭제하기 : del 딕셔너리명['키값']

 

- 키로 항목 가져온 뒤 삭제하기 : pop()

- 모든 항목 삭제하기 : clear()

딕셔너리명.clear()

 

- 키 멤버십 테스트 : in


2. 얕은 복사와 깊은 복사

딕셔너리 값이 불변이면 얕은 복사가 정상적으로 작동하나,

가변이면 깊은 복사를 사용해야 한다.

 

(1) 얕은 복사

: a=[1,2]

b=a[:]

# a를 복사한 객체를 하나 생성하고, b가 그 객체를 참조한다.

b.append(3)를 하게 되면

b가 참조하는 객체에 3을 추가하는 것이다.

출처 https://www.youtube.com/watch?v=RJqvaj8MI_o

>> a가 참조하고 있는 객체 자체를 복사하고 b가 그 객체를 가리킨다. (얕은 복사)

 

단순 할당

>> 단순할당은 a가 참조하는 걸 b도 참조하는 것이다.

즉 화살표가 가리키는 곳이 똑같다.

얕은 복사는 새 복합 객체를 만들고 원본 객체 내에 있는 오브젝트에 대한 참조를 삽입한다.

얕은 복사
얕은복사 2

>> 10과 11를 참조하는 객체를 a[0]이 참조하게 된다.

b는 여전히 [1,2]와 [3,4]를 참조하는 객체를 잠조하고 있다.

 

(2) 깊은 복사 : 참조에 대한 재귀적 복사

깊은 복사는 새 복합 객체를 만들고 원본 객체 내에 있는 객체에 대한 복사를 재귀적으로 삽입한다.

import copy

b=copy.deepcopy(a) : 형식

깊은 복사를 하게 되면 얕은 복사에서 할 수 없는 연산을 할 수 있다.

두 복사본이 공유하려고 한 데이터에 대해서도 너무 많은 복사를 할 수 있다.