From 7258dbc51803e27c1fec7b2a402e297187de3b95 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Sat, 21 Feb 2026 08:14:53 -0600 Subject: [PATCH] Use `lazy` imports in `collections` (gh-145054) --- Lib/collections/__init__.py | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/Lib/collections/__init__.py b/Lib/collections/__init__.py index 55ffc36ea5b0..2eee4c709555 100644 --- a/Lib/collections/__init__.py +++ b/Lib/collections/__init__.py @@ -32,6 +32,8 @@ import sys as _sys _sys.modules['collections.abc'] = _collections_abc abc = _collections_abc +lazy from copy import copy as _copy +lazy from heapq import nlargest as _nlargest from itertools import chain as _chain from itertools import repeat as _repeat from itertools import starmap as _starmap @@ -59,8 +61,6 @@ try: except ImportError: pass -heapq = None # Lazily imported - ################################################################################ ### OrderedDict @@ -634,12 +634,7 @@ class Counter(dict): if n is None: return sorted(self.items(), key=_itemgetter(1), reverse=True) - # Lazy import to speedup Python startup time - global heapq - if heapq is None: - import heapq - - return heapq.nlargest(n, self.items(), key=_itemgetter(1)) + return _nlargest(n, self.items(), key=_itemgetter(1)) def elements(self): '''Iterator over elements repeating each as many times as its count. @@ -1249,11 +1244,10 @@ class UserDict(_collections_abc.MutableMapping): def copy(self): if self.__class__ is UserDict: return UserDict(self.data.copy()) - import copy data = self.data try: self.data = {} - c = copy.copy(self) + c = _copy(self) finally: self.data = data c.update(self) -- 2.47.3