Mailing List Archive

bpo-33866: enum: Stop using OrderedDict (GH-7698)
commit: e57f91a0f0d5700ec466c9dd0fd2d2b5323a5e76
branch: master
author: INADA Naoki <>
committer: GitHub <>
date: 2018-06-19T01:14:26+09:00

bpo-33866: enum: Stop using OrderedDict (GH-7698)

M Doc/library/enum.rst
M Lib/

diff --git a/Doc/library/enum.rst b/Doc/library/enum.rst
index fc65a3d078f1..0394681c088e 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)
[<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

@@ -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/ b/Lib/
index 96646526ea61..04d8ec1fa872 100644
--- a/Lib/
+++ b/Lib/
@@ -1,12 +1,6 @@
import sys
from types import MappingProxyType, DynamicClassAttribute

-# try _collections first to reduce startup cost
- from _collections import OrderedDict
-except ImportError:
- from collections import OrderedDict

__all__ = [.
@@ -168,7 +162,7 @@ def __new__(metacls, cls, bases, classdict):
# 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 @@ def _convert(cls, name, module, filter, source=None):
source = vars(source)
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)]
# sort by value

Python-checkins mailing list