summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRaymond Hettinger <rhettinger@users.noreply.github.com>2018-12-04 08:13:38 (GMT)
committerMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>2018-12-04 08:13:38 (GMT)
commit7fc633f5a56d9e672cd24133e2e1376347abac6c (patch)
treecb7eb801ff44d316cecf7e2d139df16773bba0d4
parent17473347942353946fe455f797a2197cb89c1090 (diff)
downloadcpython-7fc633f5a56d9e672cd24133e2e1376347abac6c.zip
cpython-7fc633f5a56d9e672cd24133e2e1376347abac6c.tar.gz
cpython-7fc633f5a56d9e672cd24133e2e1376347abac6c.tar.bz2
Add comments regarding speed/space/entropy trade-offs (GH-10885)
-rw-r--r--Lib/random.py13
1 files changed, 13 insertions, 0 deletions
diff --git a/Lib/random.py b/Lib/random.py
index 4b51b66..a7a8607 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):