diff options
author | Alexandre Vassalotti <alexandre@peadrop.com> | 2013-12-01 21:26:32 (GMT) |
---|---|---|
committer | Alexandre Vassalotti <alexandre@peadrop.com> | 2013-12-01 21:26:32 (GMT) |
commit | 5a63aa62cad6e6cc9fbf422de54e4e0d735ec991 (patch) | |
tree | f1c91a74e0a2d7715f59fff7e2e638ef0f44f101 | |
parent | 5abca14b00224c37ad4fc8d6373d2d240680cb69 (diff) | |
parent | 5c1c3b4f197c57952760be37d77d73669284a607 (diff) | |
download | cpython-5a63aa62cad6e6cc9fbf422de54e4e0d735ec991.zip cpython-5a63aa62cad6e6cc9fbf422de54e4e0d735ec991.tar.gz cpython-5a63aa62cad6e6cc9fbf422de54e4e0d735ec991.tar.bz2 |
Issue #11480: Merge with 3.3.
-rw-r--r-- | Lib/copy.py | 8 | ||||
-rw-r--r-- | Lib/test/test_copy.py | 5 | ||||
-rw-r--r-- | Misc/NEWS | 3 |
3 files changed, 15 insertions, 1 deletions
diff --git a/Lib/copy.py b/Lib/copy.py index d96201e..d26bcdb 100644 --- a/Lib/copy.py +++ b/Lib/copy.py @@ -76,6 +76,14 @@ def copy(x): if copier: return copier(x) + try: + issc = issubclass(cls, type) + except TypeError: # cls is not a class + issc = False + if issc: + # treat it as a regular class: + return _copy_immutable(x) + copier = getattr(cls, "__copy__", None) if copier: return copier(x) diff --git a/Lib/test/test_copy.py b/Lib/test/test_copy.py index c4baae4..cde0bae 100644 --- a/Lib/test/test_copy.py +++ b/Lib/test/test_copy.py @@ -3,6 +3,7 @@ import copy import copyreg import weakref +import abc from operator import le, lt, ge, gt, eq, ne import unittest @@ -93,9 +94,11 @@ class TestCopy(unittest.TestCase): pass def f(): pass + class WithMetaclass(metaclass=abc.ABCMeta): + pass tests = [None, 42, 2**100, 3.14, True, False, 1j, "hello", "hello\u1234", f.__code__, - NewStyle, range(10), Classic, max] + NewStyle, range(10), Classic, max, WithMetaclass] for x in tests: self.assertIs(copy.copy(x), x) @@ -33,6 +33,9 @@ Library - Fixed _pickle.Unpickler to not fail when loading empty strings as persistent IDs. +- Issue #11480: Fixed copy.copy to work with classes with custom metaclasses. + Patch by Daniel Urban. + - Issue #6477: Added support for pickling the types of built-in singletons (i.e., Ellipsis, NotImplemented, None). |