diff options
author | Guido van Rossum <guido@python.org> | 2003-02-06 18:18:23 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 2003-02-06 18:18:23 (GMT) |
commit | 90e05b0e25a3e69d23054c5f05cbe5b6ec475ca5 (patch) | |
tree | cfe618cc676c9c692ac861100885d8351a73eac1 /Lib/copy.py | |
parent | 93cf58b015f797c9ad2de56f00bce5754cd764d6 (diff) | |
download | cpython-90e05b0e25a3e69d23054c5f05cbe5b6ec475ca5.zip cpython-90e05b0e25a3e69d23054c5f05cbe5b6ec475ca5.tar.gz cpython-90e05b0e25a3e69d23054c5f05cbe5b6ec475ca5.tar.bz2 |
Support __reduce__ returning a 4-tuple or 5-tuple.
Diffstat (limited to 'Lib/copy.py')
-rw-r--r-- | Lib/copy.py | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/Lib/copy.py b/Lib/copy.py index 59886cb..1845284 100644 --- a/Lib/copy.py +++ b/Lib/copy.py @@ -297,15 +297,34 @@ def _reconstruct(x, info, deep, memo=None): if memo is None: memo = {} n = len(info) - assert n in (2, 3) + assert n in (2, 3, 4, 5) callable, args = info[:2] if n > 2: state = info[2] else: state = {} + if n > 3: + listiter = info[3] + else: + listiter = None + if n > 4: + dictiter = info[4] + else: + dictiter = None if deep: args = deepcopy(args, memo) y = callable(*args) + if listiter is not None: + for item in listiter: + if deep: + item = deepcopy(item, memo) + y.append(item) + if dictiter is not None: + for key, value in dictiter: + if deep: + key = deepcopy(key, memo) + value = deepcopy(value, memo) + y[key] = value if state: if deep: state = deepcopy(state, memo) |