Don't use deepcopy when creating attributes unless really needed

This commit is contained in:
Toshio Kuratomi 2018-07-13 06:27:01 -07:00
parent 79ff2f5e9a
commit a0748c0837

View file

@ -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