From e57f91a0f0d5700ec466c9dd0fd2d2b5323a5e76 Mon Sep 17 00:00:00 2001 From: INADA Naoki Date: Tue, 19 Jun 2018 01:14:26 +0900 Subject: [PATCH] bpo-33866: enum: Stop using OrderedDict (GH-7698) --- Doc/library/enum.rst | 4 ++-- Lib/enum.py | 18 +++++------------- 2 files changed, 7 insertions(+), 15 deletions(-) diff --git a/Doc/library/enum.rst b/Doc/library/enum.rst index fc65a3d078..0394681c08 100644 --- a/Doc/library/enum.rst +++ b/Doc/library/enum.rst @@ -281,7 +281,7 @@ Iterating over the members of an enum does not provide the aliases:: >>> list(Shape) [, , ] -The special attribute ``__members__`` is an ordered dictionary mapping names +The special attribute ``__members__`` is a read-only ordered mapping of names to members. It includes all names defined in the enumeration, including the aliases:: @@ -998,7 +998,7 @@ Finer Points Supported ``__dunder__`` names """""""""""""""""""""""""""""" -:attr:`__members__` is an :class:`OrderedDict` of ``member_name``:``member`` +:attr:`__members__` is a read-only ordered mapping of ``member_name``:``member`` items. It is only available on the class. :meth:`__new__`, if specified, must create and return the enum members; it is diff --git a/Lib/enum.py b/Lib/enum.py index 96646526ea..04d8ec1fa8 100644 --- a/Lib/enum.py +++ b/Lib/enum.py @@ -1,12 +1,6 @@ import sys from types import MappingProxyType, DynamicClassAttribute -# try _collections first to reduce startup cost -try: - from _collections import OrderedDict -except ImportError: - from collections import OrderedDict - __all__ = [ 'EnumMeta', @@ -168,7 +162,7 @@ class EnumMeta(type): # create our new Enum type enum_class = super().__new__(metacls, cls, bases, classdict) enum_class._member_names_ = [] # names in definition order - enum_class._member_map_ = OrderedDict() # name->value map + enum_class._member_map_ = {} # name->value map enum_class._member_type_ = member_type # save attributes from super classes so we know if we can take @@ -630,14 +624,12 @@ class Enum(metaclass=EnumMeta): source = vars(source) else: source = module_globals - # We use an OrderedDict of sorted source keys so that the - # _value2member_map is populated in the same order every time + # _value2member_map_ is populated in the same order every time # for a consistent reverse mapping of number to name when there - # are multiple names for the same number rather than varying - # between runs due to hash randomization of the module dictionary. + # are multiple names for the same number. members = [ - (name, source[name]) - for name in source.keys() + (name, value) + for name, value in source.items() if filter(name)] try: # sort by value -- 2.40.0