]> granicus.if.org Git - python/commitdiff
bpo-33866: enum: Stop using OrderedDict (GH-7698)
authorINADA Naoki <methane@users.noreply.github.com>
Mon, 18 Jun 2018 16:14:26 +0000 (01:14 +0900)
committerGitHub <noreply@github.com>
Mon, 18 Jun 2018 16:14:26 +0000 (01:14 +0900)
Doc/library/enum.rst
Lib/enum.py

index fc65a3d078f19c27d3c4b05e139115c6b7782401..0394681c088e75945cc36d25d7399e06155d7d53 100644 (file)
@@ -281,7 +281,7 @@ Iterating over the members of an enum does not provide the aliases::
     >>> list(Shape)
     [<Shape.SQUARE: 2>, <Shape.DIAMOND: 1>, <Shape.CIRCLE: 3>]
 
-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
index 96646526ea61c3bd8c48aa7950afb5364a0c3a18..04d8ec1fa872f881f373afcbff374d14aa23d04f 100644 (file)
@@ -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