Python 사전 의 핵심 바 텀 원리 설명

사전 대상 의 핵심 은 산 목록 이다.해시 표 는 희소 한 배열(항상 공백 요소 가 있 는 배열)이 고 배열 의 모든 단원 을 bucket 이 라 고 합 니 다.각 bucket 은 두 부분 이 있 습 니 다.하 나 는 키 대상 의 참조 이 고 하 나 는 값 대상 의 참조 입 니 다.모든 bucket 구조 와 크기 가 일치 합 니 다.지정 한 bucket 을 오프셋 으로 읽 을 수 있 습 니 다.다음은 데 이 터 를 저장 하고 얻 는 과정 을 통 해 사전 의 기본 원 리 를 소개 한다.

데 이 터 를 저장 하 는 과정
예 를 들 어,우 리 는'name'='장삼'이라는 키 값 을 사전 맵 에 저장 하고,그룹의 길이 가 8 이 라 고 가정 하면 3 자리 2 진법 으로 표시 할 수 있다.

>>> map = {}
>>> map
{}
>>> map['name'] = '  '
1.name 의 해시 값 을 계산 합 니 다.

>>> bin(hash('name'))
'0b101011100000110111101000101010100010011010110010100101001000110'
2.해시 값 의 맨 오른쪽 3 자리 숫자 를 오프셋,즉'110'으로 하고 10 진 은 숫자 6 이다.우 리 는 오프셋 6,대응 하 는 bucket 이 비어 있 는 지 확인 합 니 다.비어 있 으 면 키 를 맞 춰 넣 습 니 다.비어 있 지 않 으 면,순서대로 오른쪽으로 이동 합 니 다. 3 비트 는 오프셋,즉"000"입 니 다.10 진 은 숫자 0 입 니 다.이 과정 을 반복 합 니 다.빈 bucket 을 찾 을 때 까지 키 를 넣 습 니 다.python 은 흩 어 진 목록 의 혼잡 도 에 따라 확 대 됩 니 다."확장 이란 더 큰 배열 을 만 들 고 기 존 내용 을 새 배열 에 복사 하 는 것 을 말한다.2/3 에 가 까 워 지면 배열 이 확대 된다.용량 을 확대 한 후 편 이 량 의 숫자 개수 가 증가 하 는데,예 를 들 어 수조 의 길이 가 16 까지 확 대 될 때 가장 오른쪽 에 있 는 4 자리 숫자 를 편 이 량 으로 사용 할 수 있다.

데이터 획득 과정

>>> map.get('name')
'  '
1.name 의 해시 값 계산
2.가장 오른쪽 에 있 는 3 자리 숫자 를 오프셋,즉'110'으로 하고 10 진 은 숫자 6 이다.오프셋 6,대응 하 는 bucket 이 비어 있 는 지 확인 합 니 다.비어 있 으 면 None 로 돌아 갑 니 다.비어 있 지 않 으 면 이 bucket 의 키 대상 을 해시 값 으로 계산 하고 우리 의 해시 값 과 비교 하 며 같 으 면'값 대상'을 되 돌려 줍 니 다.같 지 않 으 면,다른 몇 자리 숫자 를 차례대로 뽑 아 오프셋 을 다시 계산한다.이 과정 을 순환 합 니 다.
소결:
1.키 는 숫자,원본,문자열 과 같이 해시 되 어야 합 니 다.사용자 정의 대상 만족 지원 hash,지원 통과eq__()방법 검 측 상등 성,만약 a==b 가 진실 이 라면 hash(a)==hash(b)도 진실 이다.

>>> b = [1,2] //List    
>>> bin(hash(b))
Traceback (most recent call last):
 File "<pyshell#90>", line 1, in <module>
  bin(hash(b))
TypeError: unhashable type: 'list'
2.사전 은 메모리 에서 비용 이 많이 들 고 전형 적 인 공간 에서 시간 을 바꾼다.
3.키 조회 속도 가 빠르다;
4.사전 에 새 것 을 추가 하면 확 대 될 수 있 으 며,산 목록 에 있 는 키 의 순서 가 변 할 수 있 습 니 다.따라서 사전 을 옮 겨 다 니 면서 사전 수정 을 하지 마 세 요.
총결산
이상 은 이 글 의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가 치 를 가지 기 를 바 랍 니 다.여러분 의 저희 에 대한 지지 에 감 사 드 립 니 다.더 많은 내용 을 알 고 싶다 면 아래 링크 를 보 세 요.

좋은 웹페이지 즐겨찾기