Python 사전 의 핵심 바 텀 원리 설명
데 이 터 를 저장 하 는 과정
예 를 들 어,우 리 는'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.사전 에 새 것 을 추가 하면 확 대 될 수 있 으 며,산 목록 에 있 는 키 의 순서 가 변 할 수 있 습 니 다.따라서 사전 을 옮 겨 다 니 면서 사전 수정 을 하지 마 세 요.
총결산
이상 은 이 글 의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가 치 를 가지 기 를 바 랍 니 다.여러분 의 저희 에 대한 지지 에 감 사 드 립 니 다.더 많은 내용 을 알 고 싶다 면 아래 링크 를 보 세 요.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.