summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/copy.py4
-rw-r--r--Lib/test/test_copy.py11
-rw-r--r--Misc/ACKS1
-rw-r--r--Misc/NEWS3
4 files changed, 19 insertions, 0 deletions
diff --git a/Lib/copy.py b/Lib/copy.py
index 2646350..789488c 100644
--- a/Lib/copy.py
+++ b/Lib/copy.py
@@ -238,6 +238,10 @@ d[dict] = _deepcopy_dict
if PyStringMap is not None:
d[PyStringMap] = _deepcopy_dict
+def _deepcopy_method(x, memo): # Copy instance methods
+ return type(x)(x.__func__, deepcopy(x.__self__, memo))
+_deepcopy_dispatch[types.MethodType] = _deepcopy_method
+
def _keep_alive(x, memo):
"""Keeps a reference to the object x in the memo.
diff --git a/Lib/test/test_copy.py b/Lib/test/test_copy.py
index 2af2109..2df0deb 100644
--- a/Lib/test/test_copy.py
+++ b/Lib/test/test_copy.py
@@ -677,6 +677,17 @@ class TestCopy(unittest.TestCase):
del d
self.assertEqual(len(v), 1)
+ def test_deepcopy_bound_method(self):
+ class Foo(object):
+ def m(self):
+ pass
+ f = Foo()
+ f.b = f.m
+ g = copy.deepcopy(f)
+ self.assertEqual(g.m, g.b)
+ self.assertTrue(g.b.__self__ is g)
+ g.b()
+
def global_foo(x, y): return x+y
diff --git a/Misc/ACKS b/Misc/ACKS
index 0442244..89a5fc4 100644
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -144,6 +144,7 @@ Josh Cogliati
Dave Cole
Benjamin Collar
Jeffery Collins
+Robert Collins
Paul Colomiets
Matt Conway
David M. Cooke
diff --git a/Misc/NEWS b/Misc/NEWS
index 4ca20ed..3abf192 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -140,6 +140,9 @@ C-API
Library
-------
+- Issue #1515: Enable use of deepcopy() with instance methods. Patch by
+ Robert Collins.
+
- Issue #7403: logging: Fixed possible race condition in lock creation.
- Issue #6845: Add restart support for binary upload in ftplib. The