diff --git a/Doc/library/http.client.rst b/Doc/library/http.client.rst
index 2f59ece..53de40f 100644
--- a/Doc/library/http.client.rst
+++ b/Doc/library/http.client.rst
@@ -372,7 +372,7 @@
    Section 3.3.1.  How the data is encoded is dependent on the type of
    *message_body*.  If *message_body* implements the :ref:`buffer interface
    <bufferobjects>` the encoding will result in a single chunk.
-   If *message_body* is a :class:`collections.Iterable`, each iteration
+   If *message_body* is a :class:`collections.abc.Iterable`, each iteration
    of *message_body* will result in a chunk.  If *message_body* is a
    :term:`file object`, each call to ``.read()`` will result in a chunk.
    The method automatically signals the end of the chunk-encoded data
diff --git a/Doc/reference/datamodel.rst b/Doc/reference/datamodel.rst
index 35925a0..058fa90 100644
--- a/Doc/reference/datamodel.rst
+++ b/Doc/reference/datamodel.rst
@@ -1375,7 +1375,7 @@
    :meth:`__hash__` method of a class is ``None``, instances of the class will
    raise an appropriate :exc:`TypeError` when a program attempts to retrieve
    their hash value, and will also be correctly identified as unhashable when
-   checking ``isinstance(obj, collections.Hashable)``.
+   checking ``isinstance(obj, collections.abc.Hashable)``.
 
    If a class that overrides :meth:`__eq__` needs to retain the implementation
    of :meth:`__hash__` from a parent class, the interpreter must be told this
@@ -1385,7 +1385,7 @@
    support, it should include ``__hash__ = None`` in the class definition.
    A class which defines its own :meth:`__hash__` that explicitly raises
    a :exc:`TypeError` would be incorrectly identified as hashable by
-   an ``isinstance(obj, collections.Hashable)`` call.
+   an ``isinstance(obj, collections.abc.Hashable)`` call.
 
 
    .. note::
@@ -1981,7 +1981,7 @@
 :meth:`keys`, :meth:`values`, :meth:`items`, :meth:`get`, :meth:`clear`,
 :meth:`setdefault`, :meth:`pop`, :meth:`popitem`, :meth:`!copy`, and
 :meth:`update` behaving similar to those for Python's standard dictionary
-objects.  The :mod:`collections` module provides a
+objects.  The :mod:`collections.abc` module provides a
 :class:`~collections.abc.MutableMapping`
 abstract base class to help create those methods from a base set of
 :meth:`__getitem__`, :meth:`__setitem__`, :meth:`__delitem__`, and :meth:`keys`.
diff --git a/Lib/asyncio/base_events.py b/Lib/asyncio/base_events.py
index f94ec92..6624ac1 100644
--- a/Lib/asyncio/base_events.py
+++ b/Lib/asyncio/base_events.py
@@ -14,6 +14,7 @@
 """
 
 import collections
+import collections.abc
 import concurrent.futures
 import heapq
 import itertools
@@ -1001,7 +1002,7 @@
             if host == '':
                 hosts = [None]
             elif (isinstance(host, str) or
-                  not isinstance(host, collections.Iterable)):
+                  not isinstance(host, collections.abc.Iterable)):
                 hosts = [host]
             else:
                 hosts = host
diff --git a/Lib/cgi.py b/Lib/cgi.py
index 233a496..14d15a6 100755
--- a/Lib/cgi.py
+++ b/Lib/cgi.py
@@ -32,7 +32,7 @@
 # =======
 
 from io import StringIO, BytesIO, TextIOWrapper
-from collections import Mapping
+from collections.abc import Mapping
 import sys
 import os
 import urllib.parse
diff --git a/Lib/dbm/dumb.py b/Lib/dbm/dumb.py
index c3c4a66..5064668 100644
--- a/Lib/dbm/dumb.py
+++ b/Lib/dbm/dumb.py
@@ -24,7 +24,7 @@
 import ast as _ast
 import io as _io
 import os as _os
-import collections
+import collections.abc
 
 __all__ = ["error", "open"]
 
@@ -32,7 +32,7 @@
 
 error = OSError
 
-class _Database(collections.MutableMapping):
+class _Database(collections.abc.MutableMapping):
 
     # The on-disk directory and data files can remain in mutually
     # inconsistent states for an arbitrarily long time (see comments
diff --git a/Lib/http/client.py b/Lib/http/client.py
index 0234199..0f66071 100644
--- a/Lib/http/client.py
+++ b/Lib/http/client.py
@@ -74,7 +74,7 @@
 import io
 import re
 import socket
-import collections
+import collections.abc
 from urllib.parse import urlsplit
 
 # HTTPMessage, parse_headers(), and the HTTP status code constants are
@@ -977,7 +977,7 @@
         try:
             self.sock.sendall(data)
         except TypeError:
-            if isinstance(data, collections.Iterable):
+            if isinstance(data, collections.abc.Iterable):
                 for d in data:
                     self.sock.sendall(d)
             else:
diff --git a/Lib/idlelib/pyparse.py b/Lib/idlelib/pyparse.py
index 6739dfd..536b2d7 100644
--- a/Lib/idlelib/pyparse.py
+++ b/Lib/idlelib/pyparse.py
@@ -1,4 +1,4 @@
-from collections import Mapping
+from collections.abc import Mapping
 import re
 import sys
 
diff --git a/Lib/lib2to3/fixes/fix_operator.py b/Lib/lib2to3/fixes/fix_operator.py
index 1aa17ba..592444e 100644
--- a/Lib/lib2to3/fixes/fix_operator.py
+++ b/Lib/lib2to3/fixes/fix_operator.py
@@ -9,7 +9,7 @@
 operator.irepeat(obj, n)       -> operator.imul(obj, n)
 """
 
-import collections
+import collections.abc
 
 # Local imports
 from lib2to3 import fixer_base
@@ -88,7 +88,7 @@
 
     def _check_method(self, node, results):
         method = getattr(self, "_" + results["method"][0].value)
-        if isinstance(method, collections.Callable):
+        if isinstance(method, collections.abc.Callable):
             if "module" in results:
                 return method
             else:
diff --git a/Lib/locale.py b/Lib/locale.py
index 5763b14..569fe85 100644
--- a/Lib/locale.py
+++ b/Lib/locale.py
@@ -14,7 +14,7 @@
 import encodings
 import encodings.aliases
 import re
-import collections
+import collections.abc
 from builtins import str as _builtin_str
 import functools
 import warnings
@@ -215,7 +215,7 @@
     percents = list(_percent_re.finditer(f))
     new_f = _percent_re.sub('%s', f)
 
-    if isinstance(val, collections.Mapping):
+    if isinstance(val, collections.abc.Mapping):
         new_val = []
         for perc in percents:
             if perc.group()[-1]=='%':
diff --git a/Lib/logging/__init__.py b/Lib/logging/__init__.py
index 49a0692..4920383 100644
--- a/Lib/logging/__init__.py
+++ b/Lib/logging/__init__.py
@@ -23,7 +23,7 @@
 To use, simply 'import logging' and log away!
 """
 
-import sys, os, time, io, traceback, warnings, weakref, collections
+import sys, os, time, io, traceback, warnings, weakref, collections.abc
 
 from string import Template
 
@@ -273,8 +273,8 @@
         # to hasattr(args[0], '__getitem__'). However, the docs on string
         # formatting still seem to suggest a mapping object is required.
         # Thus, while not removing the isinstance check, it does now look
-        # for collections.Mapping rather than, as before, dict.
-        if (args and len(args) == 1 and isinstance(args[0], collections.Mapping)
+        # for collections.abc.Mapping rather than, as before, dict.
+        if (args and len(args) == 1 and isinstance(args[0], collections.abc.Mapping)
             and args[0]):
             args = args[0]
         self.args = args
diff --git a/Lib/pathlib.py b/Lib/pathlib.py
index 1914229..4368eba 100644
--- a/Lib/pathlib.py
+++ b/Lib/pathlib.py
@@ -6,7 +6,7 @@
 import posixpath
 import re
 import sys
-from collections import Sequence
+from collections.abc import Sequence
 from errno import EINVAL, ENOENT, ENOTDIR
 from operator import attrgetter
 from stat import S_ISDIR, S_ISLNK, S_ISREG, S_ISSOCK, S_ISBLK, S_ISCHR, S_ISFIFO
diff --git a/Lib/selectors.py b/Lib/selectors.py
index 89680a2..e7bc517 100644
--- a/Lib/selectors.py
+++ b/Lib/selectors.py
@@ -6,7 +6,8 @@
 
 
 from abc import ABCMeta, abstractmethod
-from collections import namedtuple, Mapping
+from collections import namedtuple
+from collections.abc import Mapping
 import math
 import select
 import sys
diff --git a/Lib/shelve.py b/Lib/shelve.py
index 581baf1..4a56c93 100644
--- a/Lib/shelve.py
+++ b/Lib/shelve.py
@@ -59,11 +59,11 @@
 from pickle import Pickler, Unpickler
 from io import BytesIO
 
-import collections
+import collections.abc
 
 __all__ = ["Shelf", "BsdDbShelf", "DbfilenameShelf", "open"]
 
-class _ClosedDict(collections.MutableMapping):
+class _ClosedDict(collections.abc.MutableMapping):
     'Marker for a closed dict.  Access attempts raise a ValueError.'
 
     def closed(self, *args):
@@ -74,7 +74,7 @@
         return '<Closed Dictionary>'
 
 
-class Shelf(collections.MutableMapping):
+class Shelf(collections.abc.MutableMapping):
     """Base class for shelf implementations.
 
     This is initialized with a dictionary-like object.
diff --git a/Lib/test/test_dictviews.py b/Lib/test/test_dictviews.py
index 49a9e9c..51ad9b3 100644
--- a/Lib/test/test_dictviews.py
+++ b/Lib/test/test_dictviews.py
@@ -1,4 +1,4 @@
-import collections
+import collections.abc
 import copy
 import pickle
 import unittest
@@ -249,23 +249,23 @@
     def test_abc_registry(self):
         d = dict(a=1)
 
-        self.assertIsInstance(d.keys(), collections.KeysView)
-        self.assertIsInstance(d.keys(), collections.MappingView)
-        self.assertIsInstance(d.keys(), collections.Set)
-        self.assertIsInstance(d.keys(), collections.Sized)
-        self.assertIsInstance(d.keys(), collections.Iterable)
-        self.assertIsInstance(d.keys(), collections.Container)
+        self.assertIsInstance(d.keys(), collections.abc.KeysView)
+        self.assertIsInstance(d.keys(), collections.abc.MappingView)
+        self.assertIsInstance(d.keys(), collections.abc.Set)
+        self.assertIsInstance(d.keys(), collections.abc.Sized)
+        self.assertIsInstance(d.keys(), collections.abc.Iterable)
+        self.assertIsInstance(d.keys(), collections.abc.Container)
 
-        self.assertIsInstance(d.values(), collections.ValuesView)
-        self.assertIsInstance(d.values(), collections.MappingView)
-        self.assertIsInstance(d.values(), collections.Sized)
+        self.assertIsInstance(d.values(), collections.abc.ValuesView)
+        self.assertIsInstance(d.values(), collections.abc.MappingView)
+        self.assertIsInstance(d.values(), collections.abc.Sized)
 
-        self.assertIsInstance(d.items(), collections.ItemsView)
-        self.assertIsInstance(d.items(), collections.MappingView)
-        self.assertIsInstance(d.items(), collections.Set)
-        self.assertIsInstance(d.items(), collections.Sized)
-        self.assertIsInstance(d.items(), collections.Iterable)
-        self.assertIsInstance(d.items(), collections.Container)
+        self.assertIsInstance(d.items(), collections.abc.ItemsView)
+        self.assertIsInstance(d.items(), collections.abc.MappingView)
+        self.assertIsInstance(d.items(), collections.abc.Set)
+        self.assertIsInstance(d.items(), collections.abc.Sized)
+        self.assertIsInstance(d.items(), collections.abc.Iterable)
+        self.assertIsInstance(d.items(), collections.abc.Container)
 
 
 if __name__ == "__main__":
diff --git a/Lib/test/test_functools.py b/Lib/test/test_functools.py
index 29ea493..8eede7a 100644
--- a/Lib/test/test_functools.py
+++ b/Lib/test/test_functools.py
@@ -1,6 +1,7 @@
 import abc
 import builtins
 import collections
+import collections.abc
 import copy
 from itertools import permutations
 import pickle
@@ -910,7 +911,7 @@
         key = self.cmp_to_key(mycmp)
         k = key(10)
         self.assertRaises(TypeError, hash, k)
-        self.assertNotIsInstance(k, collections.Hashable)
+        self.assertNotIsInstance(k, collections.abc.Hashable)
 
 
 @unittest.skipUnless(c_functools, 'requires the C _functools module')
@@ -1707,7 +1708,7 @@
 
     def test_compose_mro(self):
         # None of the examples in this test depend on haystack ordering.
-        c = collections
+        c = collections.abc
         mro = functools._compose_mro
         bases = [c.Sequence, c.MutableMapping, c.Mapping, c.Set]
         for haystack in permutations(bases):
@@ -1715,10 +1716,10 @@
             self.assertEqual(m, [dict, c.MutableMapping, c.Mapping,
                                  c.Collection, c.Sized, c.Iterable,
                                  c.Container, object])
-        bases = [c.Container, c.Mapping, c.MutableMapping, c.OrderedDict]
+        bases = [c.Container, c.Mapping, c.MutableMapping, collections.OrderedDict]
         for haystack in permutations(bases):
-            m = mro(c.ChainMap, haystack)
-            self.assertEqual(m, [c.ChainMap, c.MutableMapping, c.Mapping,
+            m = mro(collections.ChainMap, haystack)
+            self.assertEqual(m, [collections.ChainMap, c.MutableMapping, c.Mapping,
                                  c.Collection, c.Sized, c.Iterable,
                                  c.Container, object])
 
@@ -1728,39 +1729,39 @@
         # test_mro_conflicts).
         bases = [c.Container, c.Sized, str]
         for haystack in permutations(bases):
-            m = mro(c.defaultdict, [c.Sized, c.Container, str])
-            self.assertEqual(m, [c.defaultdict, dict, c.Sized, c.Container,
-                                 object])
+            m = mro(collections.defaultdict, [c.Sized, c.Container, str])
+            self.assertEqual(m, [collections.defaultdict, dict, c.Sized,
+                                 c.Container, object])
 
         # MutableSequence below is registered directly on D. In other words, it
         # precedes MutableMapping which means single dispatch will always
         # choose MutableSequence here.
-        class D(c.defaultdict):
+        class D(collections.defaultdict):
             pass
         c.MutableSequence.register(D)
         bases = [c.MutableSequence, c.MutableMapping]
         for haystack in permutations(bases):
             m = mro(D, bases)
             self.assertEqual(m, [D, c.MutableSequence, c.Sequence, c.Reversible,
-                                 c.defaultdict, dict, c.MutableMapping, c.Mapping,
+                                 collections.defaultdict, dict, c.MutableMapping, c.Mapping,
                                  c.Collection, c.Sized, c.Iterable, c.Container,
                                  object])
 
         # Container and Callable are registered on different base classes and
         # a generic function supporting both should always pick the Callable
         # implementation if a C instance is passed.
-        class C(c.defaultdict):
+        class C(collections.defaultdict):
             def __call__(self):
                 pass
         bases = [c.Sized, c.Callable, c.Container, c.Mapping]
         for haystack in permutations(bases):
             m = mro(C, haystack)
-            self.assertEqual(m, [C, c.Callable, c.defaultdict, dict, c.Mapping,
+            self.assertEqual(m, [C, c.Callable, collections.defaultdict, dict, c.Mapping,
                                  c.Collection, c.Sized, c.Iterable,
                                  c.Container, object])
 
     def test_register_abc(self):
-        c = collections
+        c = collections.abc
         d = {"a": "b"}
         l = [1, 2, 3]
         s = {object(), None}
@@ -1786,7 +1787,7 @@
         self.assertEqual(g(s), "sized")
         self.assertEqual(g(f), "sized")
         self.assertEqual(g(t), "sized")
-        g.register(c.ChainMap, lambda obj: "chainmap")
+        g.register(collections.ChainMap, lambda obj: "chainmap")
         self.assertEqual(g(d), "mutablemapping")  # irrelevant ABCs registered
         self.assertEqual(g(l), "sized")
         self.assertEqual(g(s), "sized")
@@ -1854,7 +1855,7 @@
         self.assertEqual(g(t), "tuple")
 
     def test_c3_abc(self):
-        c = collections
+        c = collections.abc
         mro = functools._c3_mro
         class A(object):
             pass
@@ -1895,7 +1896,7 @@
         self.assertEqual(fun(aa), 'fun A')
 
     def test_mro_conflicts(self):
-        c = collections
+        c = collections.abc
         @functools.singledispatch
         def g(arg):
             return "base"
@@ -1956,7 +1957,7 @@
         # MutableMapping's bases implicit as well from defaultdict's
         # perspective.
         with self.assertRaises(RuntimeError) as re_two:
-            h(c.defaultdict(lambda: 0))
+            h(collections.defaultdict(lambda: 0))
         self.assertIn(
             str(re_two.exception),
             (("Ambiguous dispatch: <class 'collections.abc.Container'> "
@@ -1964,7 +1965,7 @@
              ("Ambiguous dispatch: <class 'collections.abc.Sized'> "
               "or <class 'collections.abc.Container'>")),
         )
-        class R(c.defaultdict):
+        class R(collections.defaultdict):
             pass
         c.MutableSequence.register(R)
         @functools.singledispatch
@@ -2041,7 +2042,7 @@
         _orig_wkd = functools.WeakKeyDictionary
         td = TracingDict()
         functools.WeakKeyDictionary = lambda: td
-        c = collections
+        c = collections.abc
         @functools.singledispatch
         def g(arg):
             return "base"
diff --git a/Lib/test/test_hash.py b/Lib/test/test_hash.py
index aa4efbf..01dd777 100644
--- a/Lib/test/test_hash.py
+++ b/Lib/test/test_hash.py
@@ -8,7 +8,7 @@
 import sys
 import unittest
 from test.support.script_helper import assert_python_ok
-from collections import Hashable
+from collections.abc import Hashable
 
 IS_64BIT = sys.maxsize > 2**32
 
diff --git a/Lib/test/test_pathlib.py b/Lib/test/test_pathlib.py
index 21a6390..138bc06 100644
--- a/Lib/test/test_pathlib.py
+++ b/Lib/test/test_pathlib.py
@@ -1,4 +1,4 @@
-import collections
+import collections.abc
 import io
 import os
 import errno
@@ -1408,7 +1408,7 @@
         P = self.cls
         p = P(BASE)
         it = p.glob("fileA")
-        self.assertIsInstance(it, collections.Iterator)
+        self.assertIsInstance(it, collections.abc.Iterator)
         _check(it, ["fileA"])
         _check(p.glob("fileB"), [])
         _check(p.glob("dir*/file*"), ["dirB/fileB", "dirC/fileC"])
@@ -1432,7 +1432,7 @@
         P = self.cls
         p = P(BASE)
         it = p.rglob("fileA")
-        self.assertIsInstance(it, collections.Iterator)
+        self.assertIsInstance(it, collections.abc.Iterator)
         _check(it, ["fileA"])
         _check(p.rglob("fileB"), ["dirB/fileB"])
         _check(p.rglob("*/fileA"), [])
diff --git a/Lib/test/test_statistics.py b/Lib/test/test_statistics.py
index 4b3fd36..b577433 100644
--- a/Lib/test/test_statistics.py
+++ b/Lib/test/test_statistics.py
@@ -4,6 +4,7 @@
 """
 
 import collections
+import collections.abc
 import decimal
 import doctest
 import math
@@ -218,8 +219,8 @@
         if rel is None:
             rel = self.rel
         if (
-                isinstance(first, collections.Sequence) and
-                isinstance(second, collections.Sequence)
+                isinstance(first, collections.abc.Sequence) and
+                isinstance(second, collections.abc.Sequence)
             ):
             check = self._check_approx_seq
         else:
diff --git a/Lib/test/test_typing.py b/Lib/test/test_typing.py
index f0070ec..20fc221 100644
--- a/Lib/test/test_typing.py
+++ b/Lib/test/test_typing.py
@@ -2023,11 +2023,11 @@
         self.assertIsSubclass(MMC, typing.Mapping)
 
         self.assertIsInstance(MMB[KT, VT](), typing.Mapping)
-        self.assertIsInstance(MMB[KT, VT](), collections.Mapping)
+        self.assertIsInstance(MMB[KT, VT](), collections_abc.Mapping)
 
-        self.assertIsSubclass(MMA, collections.Mapping)
-        self.assertIsSubclass(MMB, collections.Mapping)
-        self.assertIsSubclass(MMC, collections.Mapping)
+        self.assertIsSubclass(MMA, collections_abc.Mapping)
+        self.assertIsSubclass(MMB, collections_abc.Mapping)
+        self.assertIsSubclass(MMC, collections_abc.Mapping)
 
         self.assertIsSubclass(MMB[str, str], typing.Mapping)
         self.assertIsSubclass(MMC, MMA)
@@ -2039,9 +2039,9 @@
         def g(): yield 0
         self.assertIsSubclass(G, typing.Generator)
         self.assertIsSubclass(G, typing.Iterable)
-        if hasattr(collections, 'Generator'):
-            self.assertIsSubclass(G, collections.Generator)
-        self.assertIsSubclass(G, collections.Iterable)
+        if hasattr(collections_abc, 'Generator'):
+            self.assertIsSubclass(G, collections_abc.Generator)
+        self.assertIsSubclass(G, collections_abc.Iterable)
         self.assertNotIsSubclass(type(g), G)
 
     @skipUnless(PY36, 'Python 3.6 required')
@@ -2057,15 +2057,15 @@
         g = ns['g']
         self.assertIsSubclass(G, typing.AsyncGenerator)
         self.assertIsSubclass(G, typing.AsyncIterable)
-        self.assertIsSubclass(G, collections.AsyncGenerator)
-        self.assertIsSubclass(G, collections.AsyncIterable)
+        self.assertIsSubclass(G, collections_abc.AsyncGenerator)
+        self.assertIsSubclass(G, collections_abc.AsyncIterable)
         self.assertNotIsSubclass(type(g), G)
 
         instance = G()
         self.assertIsInstance(instance, typing.AsyncGenerator)
         self.assertIsInstance(instance, typing.AsyncIterable)
-        self.assertIsInstance(instance, collections.AsyncGenerator)
-        self.assertIsInstance(instance, collections.AsyncIterable)
+        self.assertIsInstance(instance, collections_abc.AsyncGenerator)
+        self.assertIsInstance(instance, collections_abc.AsyncIterable)
         self.assertNotIsInstance(type(g), G)
         self.assertNotIsInstance(g, G)
 
@@ -2102,23 +2102,23 @@
         self.assertIsSubclass(D, B)
 
         class M(): ...
-        collections.MutableMapping.register(M)
+        collections_abc.MutableMapping.register(M)
         self.assertIsSubclass(M, typing.Mapping)
 
     def test_collections_as_base(self):
 
-        class M(collections.Mapping): ...
+        class M(collections_abc.Mapping): ...
         self.assertIsSubclass(M, typing.Mapping)
         self.assertIsSubclass(M, typing.Iterable)
 
-        class S(collections.MutableSequence): ...
+        class S(collections_abc.MutableSequence): ...
         self.assertIsSubclass(S, typing.MutableSequence)
         self.assertIsSubclass(S, typing.Iterable)
 
-        class I(collections.Iterable): ...
+        class I(collections_abc.Iterable): ...
         self.assertIsSubclass(I, typing.Iterable)
 
-        class A(collections.Mapping, metaclass=abc.ABCMeta): ...
+        class A(collections_abc.Mapping, metaclass=abc.ABCMeta): ...
         class B: ...
         A.register(B)
         self.assertIsSubclass(B, typing.Mapping)
diff --git a/Lib/tracemalloc.py b/Lib/tracemalloc.py
index 75b3918..597a297 100644
--- a/Lib/tracemalloc.py
+++ b/Lib/tracemalloc.py
@@ -1,4 +1,4 @@
-from collections import Sequence, Iterable
+from collections.abc import Sequence, Iterable
 from functools import total_ordering
 import fnmatch
 import linecache
diff --git a/Lib/weakref.py b/Lib/weakref.py
index 787e33a..1802f32 100644
--- a/Lib/weakref.py
+++ b/Lib/weakref.py
@@ -21,7 +21,7 @@
 
 from _weakrefset import WeakSet, _IterationGuard
 
-import collections  # Import after _weakref to avoid circular import.
+import collections.abc  # Import after _weakref to avoid circular import.
 import sys
 import itertools
 
@@ -87,7 +87,7 @@
     __hash__ = ref.__hash__
 
 
-class WeakValueDictionary(collections.MutableMapping):
+class WeakValueDictionary(collections.abc.MutableMapping):
     """Mapping class that references values weakly.
 
     Entries in the dictionary will be discarded when no strong
@@ -340,7 +340,7 @@
         super().__init__(ob, callback)
 
 
-class WeakKeyDictionary(collections.MutableMapping):
+class WeakKeyDictionary(collections.abc.MutableMapping):
     """ Mapping class that references keys weakly.
 
     Entries in the dictionary will be discarded when there is no
diff --git a/Lib/xml/etree/ElementTree.py b/Lib/xml/etree/ElementTree.py
index 7944cf1..7caef55 100644
--- a/Lib/xml/etree/ElementTree.py
+++ b/Lib/xml/etree/ElementTree.py
@@ -96,6 +96,7 @@
 import warnings
 import io
 import collections
+import collections.abc
 import contextlib
 
 from . import ElementPath
@@ -1231,7 +1232,7 @@
             if close_source:
                 source.close()
 
-    class IterParseIterator(collections.Iterator):
+    class IterParseIterator(collections.abc.Iterator):
         __next__ = iterator().__next__
     it = IterParseIterator()
     it.root = None
