OpaqueKey copy and deepcopy are identity ops
because keys are immutable
This commit is contained in:
committed by
Sarina Canelake
parent
2c6437a279
commit
84ee2b19f2
@@ -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):
|
|||||||
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])
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user