copy: Support copy and deepcopy of OrderedDict objects.

Signed-off-by: Damien George <damien@micropython.org>
pull/205/merge
Damien George 2020-07-07 10:56:10 +10:00
rodzic b89114c834
commit 6b985bbc1b
1 zmienionych plików z 10 dodań i 1 usunięć

Wyświetl plik

@ -57,6 +57,11 @@ class Error(Exception):
pass
error = Error # backward compatibility
try:
from ucollections import OrderedDict
except ImportError:
OrderedDict = None
try:
from org.python.core import PyStringMap
except ImportError:
@ -121,6 +126,8 @@ def _copy_with_constructor(x):
return type(x)(x)
for t in (list, dict, set):
d[t] = _copy_with_constructor
if OrderedDict is not None:
d[OrderedDict] = _copy_with_constructor
def _copy_with_copy_method(x):
return x.copy()
@ -235,12 +242,14 @@ def _deepcopy_tuple(x, memo):
d[tuple] = _deepcopy_tuple
def _deepcopy_dict(x, memo):
y = {}
y = type(x)()
memo[id(x)] = y
for key, value in x.items():
y[deepcopy(key, memo)] = deepcopy(value, memo)
return y
d[dict] = _deepcopy_dict
if OrderedDict is not None:
d[OrderedDict] = _deepcopy_dict
if PyStringMap is not None:
d[PyStringMap] = _deepcopy_dict