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()