diff options
-rw-r--r-- | Lib/random.py | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/Lib/random.py b/Lib/random.py index 4b51b6696b..a7a86070c0 100644 --- a/Lib/random.py +++ b/Lib/random.py @@ -333,6 +333,19 @@ class Random(_random.Random): # preferred since the list takes less space than the # set and it doesn't suffer from frequent reselections. + # The number of calls to _randbelow() is kept at or near k, the + # theoretical minimum. This is important because running time + # is dominated by _randbelow() and because it extracts the + # least entropy from the underlying random number generators. + + # Memory requirements are kept to the smaller of a k-length + # set or an n-length list. + + # There are other sampling algorithms that do not require + # auxiliary memory, but they were rejected because they made + # too many calls to _randbelow(), making them slower and + # causing them to eat more entropy than necessary. + if isinstance(population, _Set): population = tuple(population) if not isinstance(population, _Sequence): |