bpo-40327: Improve atomicity, speed, and memory efficiency of the items() loop (GH-19628)

(cherry picked from commit 75bedbe2ed4119ff18a2ea86c544b3cf08a92e75)

Co-authored-by: Raymond Hettinger <rhettinger@users.noreply.github.com>
diff --git a/Lib/pickle.py b/Lib/pickle.py
index 515cb8a..af50a9b 100644
--- a/Lib/pickle.py
+++ b/Lib/pickle.py
@@ -339,7 +339,7 @@
         return module_name
     # Protect the iteration by using a list copy of sys.modules against dynamic
     # modules that trigger imports of other modules upon calls to getattr.
-    for module_name, module in list(sys.modules.items()):
+    for module_name, module in sys.modules.copy().items():
         if module_name == '__main__' or module is None:
             continue
         try: