From 84ee2b19f27728d4008ff2e4fe6abd802aaf56d7 Mon Sep 17 00:00:00 2001 From: Don Mitchell Date: Wed, 4 Jun 2014 11:11:09 -0400 Subject: [PATCH] OpaqueKey copy and deepcopy are identity ops because keys are immutable --- common/lib/opaque_keys/opaque_keys/__init__.py | 13 +++++++++---- .../opaque_keys/tests/test_opaque_keys.py | 3 --- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/common/lib/opaque_keys/opaque_keys/__init__.py b/common/lib/opaque_keys/opaque_keys/__init__.py index bd097638f5..2a8af4b52a 100644 --- a/common/lib/opaque_keys/opaque_keys/__init__.py +++ b/common/lib/opaque_keys/opaque_keys/__init__.py @@ -187,12 +187,17 @@ class OpaqueKey(object): return self.NAMESPACE_SEPARATOR.join([self.CANONICAL_NAMESPACE, self._to_string()]) # pylint: disable=no-member def __copy__(self): - return self.replace() + """ + Because it's immutable, return itself + """ + return self def __deepcopy__(self, memo): - return self.replace(**{ - key: deepcopy(getattr(self, key), memo) for key in self.KEY_FIELDS # pylint: disable=no-member - }) + """ + Because it's immutable, return itself + """ + memo[id(self)] = self + return self def __setstate__(self, state_dict): # used by pickle to set fields on an unpickled object diff --git a/common/lib/opaque_keys/opaque_keys/tests/test_opaque_keys.py b/common/lib/opaque_keys/opaque_keys/tests/test_opaque_keys.py index 4f9c8ef5a9..100dd08844 100644 --- a/common/lib/opaque_keys/opaque_keys/tests/test_opaque_keys.py +++ b/common/lib/opaque_keys/opaque_keys/tests/test_opaque_keys.py @@ -136,12 +136,9 @@ class KeyTests(TestCase): deep = copy.deepcopy(original) self.assertEquals(original, copied) - self.assertNotEquals(id(original), id(copied)) self.assertEquals(id(original.value), id(copied.value)) self.assertEquals(original, deep) - self.assertNotEquals(id(original), id(deep)) - self.assertNotEquals(id(original.value), id(deep.value)) self.assertEquals(copy.deepcopy([original]), [original])