mayoría de las respuestas sugieren que esto es debido a las diferentes plataformas, pero hay más que eso. De the documentation of object.__hash__(self)
:
Por defecto, los valores de __hash__()
str
, bytes
y datetime
objetos se “salada” con un valor aleatorio impredecible. Aunque permanecen constantes dentro de un proceso de Python individual, no son predecibles entre invocaciones repetidas de Python.
Esto está diseñado para proporcionar protección contra una denegación de servicio causada por entradas cuidadosamente seleccionadas que explotan el peor de los casos rendimiento de una inserción dict, complejidad O (n²). Vea http://www.ocert.org/advisories/ocert-2011-003.html para más detalles.
El cambio de los valores de hash afecta al orden de iteración de dicts
, sets
y otras asignaciones. Python nunca ha hecho garantías sobre este pedido (y generalmente varía entre compilaciones de 32 bits y de 64 bits).
Incluso se ejecutan en la misma máquina producirá resultados variables a través de invocaciones:
$ python -c "print(hash('http://stackoverflow.com'))"
-3455286212422042986
$ python -c "print(hash('http://stackoverflow.com'))"
-6940441840934557333
bien:
$ python -c "print(hash((1,2,3)))"
2528502973977326415
$ python -c "print(hash((1,2,3)))"
2528502973977326415
Véase también la variable de entorno PYTHONHASHSEED
:
Si esta variable no está configurada o configurada en random
, se usa un valor aleatorio para generar los valores hash de los objetos str
, bytes
y datetime
.
Si PYTHONHASHSEED
se establece en un valor entero, se utiliza como un semilla fija para generar la hash()
de los tipos cubiertos por el hash aleatorización.
Su propósito es permitir hashing repetible, tal como por autocomprobaciones para el intérprete sí mismo, o para permitir que un grupo de procesos de pitón para valores de las acciones de patata.
El número entero debe ser un número decimal en el rango [0, 4294967295]
. Al especificar el valor 0
se deshabilitará la asignación aleatoria de hash.
Por ejemplo:
$ export PYTHONHASHSEED=0
$ python -c "print(hash('http://stackoverflow.com'))"
-5843046192888932305
$ python -c "print(hash('http://stackoverflow.com'))"
-5843046192888932305
esto se debe al hecho de que su WinXP es una plataforma de 32 bits, mientras que Google es de 64 bits –