From 7824cc05bfe7f8181b21848a52007ddaf5612b9b Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Wed, 17 Jun 2020 19:10:47 +0200 Subject: [PATCH] bpo-41006: collections imports lazily heap (GH-20940) The collections module now imports lazily the heapq modules in the Counter.most_common() method to speedup Python startup time. --- Lib/collections/__init__.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Lib/collections/__init__.py b/Lib/collections/__init__.py index 42d0ec777c3..5d75501645f 100644 --- a/Lib/collections/__init__.py +++ b/Lib/collections/__init__.py @@ -27,7 +27,6 @@ __all__ = [ ] import _collections_abc -import heapq as _heapq import sys as _sys from itertools import chain as _chain @@ -608,7 +607,10 @@ class Counter(dict): # Emulate Bag.sortedByCount from Smalltalk if n is None: return sorted(self.items(), key=_itemgetter(1), reverse=True) - return _heapq.nlargest(n, self.items(), key=_itemgetter(1)) + + # Lazy import to speedup Python startup time + import heapq + return heapq.nlargest(n, self.items(), key=_itemgetter(1)) def elements(self): '''Iterator over elements repeating each as many times as its count.