summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorFred Drake <fdrake@acm.org>2001-11-05 17:40:48 (GMT)
committerFred Drake <fdrake@acm.org>2001-11-05 17:40:48 (GMT)
commit3ce5af70e352b3a8fbea8e3f27464b6ca2d66ebd (patch)
tree48a269d52db6299822267b674e5856f6d55cddbd /Lib
parent9c2b514014da667e430b9118317876eb1f5e3367 (diff)
downloadcpython-3ce5af70e352b3a8fbea8e3f27464b6ca2d66ebd.zip
cpython-3ce5af70e352b3a8fbea8e3f27464b6ca2d66ebd.tar.gz
cpython-3ce5af70e352b3a8fbea8e3f27464b6ca2d66ebd.tar.bz2
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.
Diffstat (limited to 'Lib')
-rw-r--r--Lib/UserDict.py9
1 files changed, 8 insertions, 1 deletions
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 @@ class UserDict:
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()