Commit 84ee2b19 by Don Mitchell Committed by Sarina Canelake

OpaqueKey copy and deepcopy are identity ops

because keys are immutable
parent 2c6437a2
...@@ -187,12 +187,17 @@ class OpaqueKey(object): ...@@ -187,12 +187,17 @@ class OpaqueKey(object):
return self.NAMESPACE_SEPARATOR.join([self.CANONICAL_NAMESPACE, self._to_string()]) # pylint: disable=no-member return self.NAMESPACE_SEPARATOR.join([self.CANONICAL_NAMESPACE, self._to_string()]) # pylint: disable=no-member
def __copy__(self): def __copy__(self):
return self.replace() """
Because it's immutable, return itself
"""
return self
def __deepcopy__(self, memo): 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): def __setstate__(self, state_dict):
# used by pickle to set fields on an unpickled object # used by pickle to set fields on an unpickled object
......
...@@ -136,12 +136,9 @@ class KeyTests(TestCase): ...@@ -136,12 +136,9 @@ class KeyTests(TestCase):
deep = copy.deepcopy(original) deep = copy.deepcopy(original)
self.assertEquals(original, copied) self.assertEquals(original, copied)
self.assertNotEquals(id(original), id(copied))
self.assertEquals(id(original.value), id(copied.value)) self.assertEquals(id(original.value), id(copied.value))
self.assertEquals(original, deep) self.assertEquals(original, deep)
self.assertNotEquals(id(original), id(deep))
self.assertNotEquals(id(original.value), id(deep.value))
self.assertEquals(copy.deepcopy([original]), [original]) self.assertEquals(copy.deepcopy([original]), [original])
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment