dans python (3), quelle est la plus petite valeur que hash(x)
peut renvoyer? Je veux utiliser des hachages pour donner une «empreinte digitale» rapide aux valeurs de la base de données (ce qui permet de voir si deux textes longs et similaires sont réellement égaux ou non), et je veux me débarrasser des nombres négatifs (pour plus de simplicité)), alors j'ai pensé que j'ajouterais juste la plus petite valeur possible pour obtenir des valeurs de zéro et plus. the manual est très utile indiquant "Les valeurs de hachage sont des entiers." ce qui est à peu près tout ce que je savais avant.plus petite valeur de la fonction de hachage()?
J'étais un peu surpris aujourd'hui quand j'ai découvert que mon python compilé à la main sur un Ubuntu 64bit utilise apparemment 64 bits ou plus pour sa fonction de hachage; J'ai toujours pensé que ça devrait être 32bit. l'architecture de la machine a-t-elle un impact sur la fonction hash()
?
également, lorsque j'ai compilé python, je n'ai pas défini d'option pour compiler une architecture 64 bits (en espérant que cela «fonctionnerait»). est-ce que python ajuste cela par lui-même ou est-ce que j'ai maintenant un python 32 bits sur une machine 64 bits? pas une question stupide je crois autant de fois que vous êtes offerts des paquets distincts en fonction de l'opérateur.
modifier: Je soupçonne fortement la réponse sera étroitement liée à sys.maxint
qui a malheureusement été retiré de python 3. Je soupçonne que je devrais def xhash(x): return hash(x) - (-maxint - 1)
si maxint
était disponible. Je sais que cette valeur «a perdu sa valeur» en raison de l'unification des ints et des longs, mais il pourrait y avoir un domaine où cela pourrait encore s'avérer utile. quelqu'un a une idée de la façon de mettre en œuvre un analogue?
Même sans 'maxint', vous êtes probablement heureux de supposer que le hachage occupe un type entier sous-jacent sur la plate-forme. Si vous voulez juste savoir si c'est 32 bits ou 64, alors prenez le hachage de n'importe quelle vieille chose (bien, pas l'entier 0) et regardez l'ordre de grandeur de la réponse. En supposant une bonne fonction de hachage, la possibilité que les 32 premiers chiffres binaires du hachage soient * tous * 0 est négligeable, de sorte qu'une valeur de hachage vous indiquera la plage. Alternativement, sacrifiez 1 bit de qualité de hachage, et utilisez simplement 'abs (hash (x))'. –