ProgramingTip

Python에 개체 고유 식별자가 있습니까?

bestdevel 2020. 10. 29. 08:25
반응형

Python에 개체 고유 식별자가 있습니까?


이것은 java.lang.Object.hashcode()방법 과 유사합니다 .

제어 할 수없는 개체를 집합에 저장하고 두 개체가 실제로 개체 (동일한 값을 포함하지 않음) 인 경우에만 값을 사용하도록해야합니다.


id(x)

당신을 위해 트릭을 할 것입니다. 하지만 궁금합니다. 결함이 있었습니까?

특정 문제에 대한 ID 또는 래퍼 개체 집합을 결정합니다. 래퍼 객체는 하나의 참조를 비교 하고 x==y<==>로 합니다 x.ref is y.ref.

Python에서도 hash함수 가 주목할 가치가 있습니다. 이 기능은 객체를 세트 또는 사전에 준비하는 데 필요합니다. 좋은 구현은 hash가능성을 줄이려고 노력해야합니다 .


그것이 " is"의 목적입니다.

if a == b동일한 값 을 테스트하는 " " 을 테스트하는 대신

if a is b동일한 식별자를 테스트하는 " "테스트.


ilya n이 언급했듯이 id (x)는 객체에 대한 고유 식별자를 생성합니다.

그러나 Java 고유의 ​​hashCode 메소드가 식별자를 제공하지 않기 때문에 귀하의 질문은 혼란 스럽습니다. Java의 hashCode는 대부분의 해시 함수처럼 작동합니다. 같지 않은 해시 값을 반환하고, 동일한 값을 반환하고, 동일한 값을 가져오고, 같지 않은 해시 코드를 의미합니다. 특히 두 개의 서로 다르고 같지 않은 특성을 가지고 있습니다.

암호화 해시 함수가 이것과 상당히 다르고 요청한 "고유 ID"와 더 관련하기 때문에 혼란 스럽습니다.

Java의 hashCode 메소드에 해당하는 Python은 hash (x)입니다.


세트에 배치하기 전에 오브젝트를 필요가 없습니다. set () 의미론은 이미 처리합니다.

   class A(object): 
     a = 10 
     b = 20 
     def __hash__(self): 
        return hash((self.a, self.b)) 

   a1 = A()
   a2 = A()
   a3 = A()
   a4 = a1
   s = set([a1,a2,a3,a4])
   s
=> set([<__main__.A object at 0x222a8c>, <__main__.A object at 0x220684>, <__main__.A object at 0x22045c>])

참고 : 이 동작을 증명하기 위해 해시재정의 할 필요는 없습니다. :-)

참고 URL : https://stackoverflow.com/questions/1252357/is-there-an-object-unique-identifier-in-python

반응형