copy():  Make sure the copy of a derived class cannot share the data of the
original by replacing self.data temporarily, then using the update() method
on the new mapping object to populate it.
This closes SF bug #476616.
diff --git a/Lib/UserDict.py b/Lib/UserDict.py
index b806ac1..b78860f 100644
--- a/Lib/UserDict.py
+++ b/Lib/UserDict.py
@@ -19,7 +19,14 @@
         if self.__class__ is UserDict:
             return UserDict(self.data)
         import copy
-        return copy.copy(self)
+        data = self.data
+        try:
+            self.data = {}
+            c = copy.copy(self)
+        finally:
+            self.data = data
+        c.update(self)
+        return c
     def keys(self): return self.data.keys()
     def items(self): return self.data.items()
     def iteritems(self): return self.data.iteritems()