diff --git a/Lib/copy.py b/Lib/copy.py
index 2646350..4b75511 100644
--- a/Lib/copy.py
+++ b/Lib/copy.py
@@ -51,6 +51,7 @@
 import types
 import weakref
 from copyreg import dispatch_table
+import builtins
 
 class Error(Exception):
     pass
@@ -109,7 +110,7 @@
 if t is not None:
     d[t] = _copy_immutable
 for name in ("complex", "unicode"):
-    t = globals()['__builtins__'].get(name)
+    t = getattr(builtins, name, None)
     if t is not None:
         d[t] = _copy_immutable
 
@@ -279,17 +280,7 @@
         args = deepcopy(args, memo)
     y = callable(*args)
     memo[id(x)] = y
-    if listiter is not None:
-        for item in listiter:
-            if deep:
-                item = deepcopy(item, memo)
-            y.append(item)
-    if dictiter is not None:
-        for key, value in dictiter:
-            if deep:
-                key = deepcopy(key, memo)
-                value = deepcopy(value, memo)
-            y[key] = value
+
     if state:
         if deep:
             state = deepcopy(state, memo)
@@ -305,6 +296,18 @@
             if slotstate is not None:
                 for key, value in slotstate.items():
                     setattr(y, key, value)
+
+    if listiter is not None:
+        for item in listiter:
+            if deep:
+                item = deepcopy(item, memo)
+            y.append(item)
+    if dictiter is not None:
+        for key, value in dictiter:
+            if deep:
+                key = deepcopy(key, memo)
+                value = deepcopy(value, memo)
+            y[key] = value
     return y
 
 del d
@@ -366,6 +369,16 @@
     print(map(reprlib.repr, l1))
     print(map(reprlib.repr, l2))
     print(map(reprlib.repr, l3))
+    class odict(dict):
+        def __init__(self, d = {}):
+            self.a = 99
+            dict.__init__(self, d)
+        def __setitem__(self, k, i):
+            dict.__setitem__(self, k, i)
+            self.a
+    o = odict({"A" : "B"})
+    x = deepcopy(o)
+    print(o, x)
 
 if __name__ == '__main__':
     _test()
