En el episodio de hoy de programación de horror... En la documentación Python de random.seed() definitivamente, nos dicen "Si a es un int, se usa directamente." [1] Pero si semillas con 3 o -3, en realidad obtienes exactamente el mismo objeto de azar, produciendo las mismas corrientes. (Hoy he aprendido). En nanochat estaba usando el signo como una forma (que me parecía) ingeniosa para obtener diferentes secuencias de RNG para divisiones de tren/prueba. De ahí bug bastante fuerte porque ahora train=prueba. Encontré el código CPython responsable en cpython/Modules/_randommodule.c [2], donde en la línea 321 vemos en un comentario: "Este algoritmo depende de que el número no esté firmado. Así que: si el arg es un PyLong, usa su valor absoluto." seguido de n = PyNumber_Absolute(arg); que explícitamente llama a abs() en tu semilla para hacerla positiva, descartando el bit de signo. Pero este comentario también es incorrecto o engañoso. En el fondo, Python llama al algoritmo Mersenne Twister MT19937, que en el caso general tiene un estado de 19937 bits (no nulo). Python toma tu int (u otros objetos) y "distribuye" esa información entre estos bits. En principio, el bit de signo podría haberse utilizado para aumentar los bits de estado. No hay nada en el algoritmo que "dependa de que el número no esté firmado". Se decidió no incorporar la parte de signo (lo cual, en mi opinión, fue un error). Un ejemplo trivial podría haber sido mapear n -> 2*abs(n) + int(n < 0). Finalmente, esto nos lleva al contrato de random de Python, que tampoco está completamente detallado en la documentación. El contrato mencionado es el siguiente: Misma semilla = > misma secuencia. Pero no se garantiza que diferentes semillas produzcan distintas secuencias. Así que, en principio, Python no promete que, por ejemplo, seed(5) y seed(6) sean flujos de RNG diferentes. (Aunque esto se asume implícitamente en muchas aplicaciones.) De hecho, vemos que seed(5) y seed(-5) son corrientes idénticas. Y probablemente no deberías usarlos para separar tus comportamientos de entrenamiento/prueba en aprendizaje automático. Una de las pistolas de terror y programación más divertidas que he visto últimamente. Nos vemos en el próximo episodio. [1] [2]