오브젝트 id
을 해시 키 (__hash__
)를 사용하여 프로그램의 단일 인스턴스에 대해 달리 변경 가능한 오브젝트를 해시 할 수 있습니까? 객체 속성을 사용하면 좋겠지 만 모두 변경 가능하므로 변경할 수 있습니다.오브젝트 ID를 파이썬에서 오브젝트의 해시로 사용
이것은 Sets of instances을 보면서 나에게 일어 났으며 그것이 현명한 것인지 궁금합니다.
오브젝트 id
을 해시 키 (__hash__
)를 사용하여 프로그램의 단일 인스턴스에 대해 달리 변경 가능한 오브젝트를 해시 할 수 있습니까? 객체 속성을 사용하면 좋겠지 만 모두 변경 가능하므로 변경할 수 있습니다.오브젝트 ID를 파이썬에서 오브젝트의 해시로 사용
이것은 Sets of instances을 보면서 나에게 일어 났으며 그것이 현명한 것인지 궁금합니다.
예, (아마도 아마도 __ne__
! -)과 일관되게 정의하는 한 그렇습니다. 자, 괜찮아요. 괜찮 으면 a==b
은 정확히 a is b
과 같습니다. -)
대부분의 Python 클래스의 경우 이것이 기본 동작입니다. unhashable 것들은 좋은 이유가 unhashable 있습니다 : 그들은 변경 가능한 모음입니다.
컬렉션의 경우 내용의 동등성을 기준으로 동등한 관계 (__eq__()
에 정의 된대로)를 갖는 것이 현실적입니다. 이것과 __hash__()
에 대한 요구 사항은 평등에 부합해야하며, 물론 __hash__()
을 변경할 수 있습니다. 이러한 개체는 해당 개체를 포함하는 컬렉션에서 끔찍한 요소입니다.
이렇게 할 수는 있지만 콘텐츠 기반 동등한 관계가 필요합니다.
감사합니다. 두 번째 문장은 그것을 아주 잘 설명합니다. –