TL; DR: "rompe" en las listas con más de 2.080 elementos, pero no se preocupe demasiado :)
La respuesta completa:
En primer lugar, observe que "aleatorio", una lista se puede entender (conceptualmente) como generar todas las permutaciones posibles de los elementos de las listas, y elegir una de estas permutaciones al azar.
Luego, debe recordar que todos los generadores de números aleatorios computarizados autónomos son en realidad "pseudo" aleatorios. Es decir, en realidad no son aleatorios, sino que se basan en una serie de factores para tratar de generar un número difícil de adivinar en avanzado o reproducido a propósito. Entre estos factores suele ser el número generado anteriormente. Entonces, en la práctica, si usa un generador aleatorio de manera continua un cierto número de veces, eventualmente comenzará a obtener la misma secuencia de nuevo (este es el "período" al que se refiere la documentación).
Finalmente, el docstring en Lib/random.py (el módulo aleatorio) dice que "El período [del generador de números aleatorios] es 2**19937-1
."
Por lo tanto, dado todo eso, si su lista es tal que hay 2**19937
o más permutaciones, algunas de ellas nunca se obtendrán al mezclar la lista. Generaría (nuevamente, conceptualmente) todas las permutaciones de la lista, luego generaría un número aleatorio x y elegiría la permuta xth. La próxima vez, genere otro número aleatorio y, y elija la permutación yth. Y así. Pero, dado que hay más permutaciones que números aleatorios (porque, como máximo después de 2**19937-1
números generados, volverás a obtener los mismos), comenzarás a elegir las mismas permutaciones nuevamente.
Así que, ves, no es exactamente una cuestión de cuánto tiempo es tu lista (aunque eso sí que entra en la ecuación). Además, 2**19937-1
es un número bastante largo. Pero, aún así, dependiendo de tus necesidades de barajado, deberías tener eso en cuenta. En un caso simplista (y con un cálculo rápido), para una lista sin elementos repetidos, 2081 elementos producirían 2081!
permutaciones, que es más que 2**19937
.
+1 para explicar muy bien el tema y el problema. Imho esta debería ser la respuesta aceptada. Ah, y movería el TD; DR a la cima, ya que la mayoría de las personas que se asustan por un cuerpo de texto probablemente no leerán tan abajo :-). – Joey
Gracias :) ¡Y buena idea en TL; DR, lo haré! – rbp
@Johannes: no has borrado tu respuesta :) ¡Aún así, gracias! – rbp