더북(TheBook)

_ _init_ _LinearMap n개로 된 리스트를 만든다.

find_mapadd에서 사용되고, get은 새 항목을 어느 맵에 넣을지 알아내기 위해 사용하거나 어느 맵을 검색할지 알아내기 위해 사용된다.

find_map은 내장 함수 hash를 사용한다. hash는 거의 모든 파이썬 객체를 받을 수 있고, 정수를 반환한다. 이 구현 방식의 제한은 해시 가능한 키에만 사용할 수 있다는 것이다. 리스트와 사전 같은 가변 타입은 해시가 가능하지 않다.

해시 가능한 객체나 그에 상응하는 객체는 같은 해시 값을 반환하지만, 그 역이 반드시 성립하는 것은 아니다. 다른 값을 가진 두 객체가 같은 해시 값을 반환할 수 있다.

find_map은 해시 값을 0부터 len(self.maps) 범위로 담기 위해 나머지(%) 연산자를 사용한다. 따라서 결과는 항상 리스트 안에 있는 올바른 인덱스가 된다. 물론, 이는 다른 해시 값들도 상당수가 같은 인덱스에 담길 수 있다는 뜻이다. 그러나 해시 함수가 매우 고르게 분산시키는 것이라면(해시 함수는 이런 의도로 디자인된 것이다) LinearMap 하나당 n/100개의 항목이 있다고 기대할 수 있다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.