Issue #18844: Make the various ways for specifing weights produce the same results.
diff --git a/Lib/random.py b/Lib/random.py
index ef8cb05..a047444 100644
--- a/Lib/random.py
+++ b/Lib/random.py
@@ -344,10 +344,12 @@
         the selections are made with equal probability.
 
         """
+        random = self.random
         if cum_weights is None:
             if weights is None:
-                choice = self.choice
-                return [choice(population) for i in range(k)]
+                _int = int
+                total = len(population)
+                return [population[_int(random() * total)] for i in range(k)]
             else:
                 cum_weights = list(_itertools.accumulate(weights))
         elif weights is not None:
@@ -355,7 +357,6 @@
         if len(cum_weights) != len(population):
             raise ValueError('The number of weights does not match the population')
         bisect = _bisect.bisect
-        random = self.random
         total = cum_weights[-1]
         return [population[bisect(cum_weights, random() * total)] for i in range(k)]