From: Raymond Hettinger Date: Sat, 21 Feb 2026 14:14:53 +0000 (-0600) Subject: Use `lazy` imports in `collections` (gh-145054) X-Git-Tag: v3.15.0a7~193 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7258dbc51803e27c1fec7b2a402e297187de3b95;p=thirdparty%2FPython%2Fcpython.git Use `lazy` imports in `collections` (gh-145054) --- 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)