From 1fc0d2b364b144e501615cf82e998beb87733607 Mon Sep 17 00:00:00 2001 From: Antoine Pitrou Date: Sat, 28 Nov 2009 15:58:27 +0000 Subject: [PATCH] Merged revisions 76571 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r76571 | antoine.pitrou | 2009-11-28 16:55:58 +0100 (sam., 28 nov. 2009) | 3 lines Issue #1515: Enable use of deepcopy() with instance methods. Patch by Robert Collins. ........ --- Lib/copy.py | 4 ++++ Lib/test/test_copy.py | 11 +++++++++++ Misc/ACKS | 1 + Misc/NEWS | 3 +++ 4 files changed, 19 insertions(+) diff --git a/Lib/copy.py b/Lib/copy.py index 264635042ca..789488c1bc5 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 2af21094eac..2df0deb7c8e 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 044224405ef..89a5fc47bc6 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 4ca20ed96b0..3abf192ef9d 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