2008-12-08 24 views
6

código simple:¿Qué usa el conjunto de funciones para verificar si dos objetos son diferentes?

>>> set([2,2,1,2,2,2,3,3,5,1]) 
set([1, 2, 3, 5]) 

Ok, en los conjuntos resultantes no hay duplicados. ¿Qué ocurre si el objeto en la lista no es int, pero estoy un poco definido por mí? ¿Qué método comprueba para saber si son diferentes? Implementé __eq__ y __cmp__ con algunos objetos pero el estableció no parece usarlos: \

¿Alguien sabe cómo solucionar esto?

Respuesta

13

De acuerdo con set documentation, los elementos deben ser hashable.

un objeto es hashable si tiene un valor hash que nunca cambia durante su vida útil (se necesita un método __hash__()), y se puede comparar con otros objetos (que necesita un método __eq__() o __cmp__()). Los objetos que se pueden comparar y que son iguales deben tener el mismo valor hash.

EDITAR: añadió adecuados Hashable definición gracias a Roberto

+0

"si y sólo si" no tiene sentido, sin embargo. El hash se puede usar para preseleccionar elementos iguales, pero seguramente una comparación directa de los valores reales debe estar sucediendo también, o los resultados de las comparaciones de conjuntos serían bastante aleatorios. –

+0

De la documentación de python: Un objeto es hashable si tiene un valor hash que nunca cambia durante su vida útil (necesita un método __hash __) y se puede comparar con otros objetos (necesita un __eq __() o __cmp __() método). Los objetos que se pueden comparar y que son iguales deben tener el mismo valor hash. –

+0

editado en la respuesta de roberto. – TheSoftwareJedi

Cuestiones relacionadas