def test_copy_and_mutate(self): schema = mock.Mock() chain = FilterChain(schema=schema) chain.lookup_descriptions.append(1) chain.base_url = 'http://xyz' chain['foo'] = 'bar' chain['qux'] = 'whee' clone = chain.copy() # Attributes are copied... self.assertEqual(clone.lookup_descriptions, [1]) self.assertEqual(clone.base_url, chain.base_url) self.assertEqual(clone.schema, chain.schema, schema) # ... and mutating them doesn't affect the original. clone.lookup_descriptions.pop() self.assertEqual(chain.lookup_descriptions, [1]) # Likewise, items are copied, and mutating doesn't affect the copy. self.assertEqual(clone['foo'], 'bar') del chain['foo'] self.assertEqual(clone['foo'], 'bar') del clone['qux'] self.assertEqual(chain['qux'], 'whee') # Likewise, clearing. clone.clear() self.assertEqual(clone.items(), []) self.assertEqual(chain['qux'], 'whee')