Don't use deepcopy when creating attributes unless really needed

pull/42757/head
Toshio Kuratomi 6 years ago
parent 79ff2f5e9a
commit a0748c0837

@ -19,7 +19,10 @@
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
from copy import deepcopy
from copy import copy, deepcopy
_CONTAINERS = frozenset(('list', 'dict', 'set'))
class Attribute:
@ -84,8 +87,17 @@ class Attribute:
self.extend = extend
self.prepend = prepend
if default is not None and self.isa in ('list', 'dict', 'set'):
self.default = deepcopy(default)
if default is not None and self.isa in _CONTAINERS:
if default:
self.default = deepcopy(default)
else:
# Don't need to deepcopy default if the container is empty
# Note: switch to try: except once Python3 is more widespread
if hasattr(default, 'copy'):
self.default = default.copy()
else:
# list on python2 does not have .copy()
self.default = copy(default)
else:
self.default = default

Loading…
Cancel
Save