summaryrefslogtreecommitdiffstats
path: root/Lib/copy.py
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>2003-02-06 18:18:23 (GMT)
committerGuido van Rossum <guido@python.org>2003-02-06 18:18:23 (GMT)
commit90e05b0e25a3e69d23054c5f05cbe5b6ec475ca5 (patch)
treecfe618cc676c9c692ac861100885d8351a73eac1 /Lib/copy.py
parent93cf58b015f797c9ad2de56f00bce5754cd764d6 (diff)
downloadcpython-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.py21
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)