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])