과 __eq__
을 모두 구현하는 클래스가있다 (myClass
). 또한 myClass
개체를 약간의 값으로 매핑하는 dict
을 가지고 있습니다. 컴퓨팅에는 어느 정도 시간이 걸립니다.`만약 당신이 '키를 독점이라고 부르는 경우 어떻게 될까
내 프로그램 과정 동안 많은 (수백만 단위로) myClass
개체가 인스턴스화됩니다. 따라서 dict
을 사용하여 해당 값을 추적합니다.
그러나 때로는 새로운 myClass
개체가 이전 개체 (__eq__
메서드에 정의 된대로)와 같을 수 있습니다. 따라서 해당 객체의 값을 다시 계산하기보다는 dict
에있는 이전 myClass
객체의 값을 조회하고 싶습니다. 이를 수행하기 위해 나는 if myNewMyClassObj in dict
을 수행합니다.
여기 내 질문 : 호출되는 것을
내가 in
절 것을 사용, __hash__
또는 __eq__
? dict
을 사용하는 시점은 O (1) 조회 시간입니다. 따라서 __hash__
을 호출해야합니다. 그러나 __hash__
과 __eq__
이 동일한 방법이 아닌 경우에는 어떻게해야합니까? 이 경우 if myNewMyClassObj in dict
에 대해 거짓 긍정을 표시합니까?
는 질문을 따르
내 dict
에있는 항목의 수를 최소화하려는, 그래서 이상적으로 dict
에 해당하는 myClass
오브젝트 세트 중 하나만 유지하고 싶습니다. 그래서 다시, 그것은 if myNewClassObj in dict
을 계산할 때 __eq__
필요가 dict
의 O를 더럽히는 것이다,라고하는 것 같다 (1) O 시간을 조회 (n)의 시간을 조회
@MartijnPieters : 나는 우연히 그들을 포함하기 전에 저장을 누르십시오, 그들은 지금 있습니다. – BrenBarn
환상적인 예! – inspectorG4dget
파이썬은 해시 테이블에서 버킷을 사용하지 않습니다. 단일 값을 포함하는 각 슬롯에 슬롯을 사용합니다. 슬롯이 가득 차면 일치하는 슬롯이나 사용되지 않은 슬롯을 찾을 때까지 다른 슬롯을 선택합니다. – Duncan