Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python 함수는 왜 그리고 어떻게 해시 가능합니까?

<시간/>

객체의 수명 동안 동일하게 유지되는 해시 값이 있는 경우 객체를 해시 가능하다고 합니다. __hash__() 메서드가 있으며 다른 객체와 비교할 수 있습니다. 이를 위해서는 __eq__() 또는 __cmp__() 메서드가 필요합니다. 해시 가능한 개체가 비교할 때 동일하면 동일한 해시 값을 갖습니다.

해시 가능하다는 것은 이러한 데이터 구조가 내부적으로 해시 값을 사용하기 때문에 사전 키로 사용할 수 있는 객체와 집합 멤버를 렌더링합니다.

파이썬의 모든 불변 내장 객체는 해시 가능합니다. 목록 및 사전과 같은 변경 가능한 컨테이너는 해시 가능하지 않지만 불변 컨테이너 튜플은 해시 가능합니다.

사용자 정의 클래스의 인스턴스인 객체는 기본적으로 해시 가능합니다. 그들은 모두 같지 않은 것을 비교하고(자신을 제외하고) 해시 값은 id()에서 파생됩니다.

해시가 반드시 함수의 ID일 필요는 없는 것 같습니다. 주어진 람다 함수를 고려하십시오.

예시

m = lambda x: 1
print hash(m)
print id(m)
print m.__hash__()

출력

1265925722
3074942372
1265925722

이것은 람다 함수가 해시 가능함을 보여줍니다.

예시

이제 주어진 함수 f()를 다음과 같이 고려합시다.

def f():pass
print type(f)
print f.__hash__()
print hash(f)

출력

<type 'function'>
1265925978
1265925978

이것은 모든 함수가 수명 동안 동일하게 유지되는 해시 값을 가지므로 해시 가능하다는 것을 보여줍니다.