[issue4380] Deepcopy of functools.partial gives wierd exception

Kevin Fitch report at bugs.python.org
Fri Nov 21 21:20:48 CET 2008

New submission from Kevin Fitch <kfitch42 at gmail.com>:

from functools import partial
from copy import deepcopy

p = partial("Hello world".replace, "world")
p2 = deepcopy(p)

The output I get is:
Hello mom

Followed by:
<type 'exceptions.TypeError'>             Traceback (most recent call last)

/home/kfitch/<ipython console> in <module>()

/usr/lib/python2.5/copy.py in deepcopy(x, memo, _nil)
    187                             raise Error(
    188                                 "un(deep)copyable object of type
%s" % cls)
--> 189                 y = _reconstruct(x, rv, 1, memo)
    191     memo[d] = y

/usr/lib/python2.5/copy.py in _reconstruct(x, info, deep, memo)
    320     if deep:
    321         args = deepcopy(args, memo)
--> 322     y = callable(*args)
    323     memo[id(x)] = y
    324     if listiter is not None:

/usr/lib/python2.5/copy_reg.py in __newobj__(cls, *args)
     91 def __newobj__(cls, *args):
---> 92     return cls.__new__(cls, *args)
     94 def _slotnames(cls):

<type 'exceptions.TypeError'>: type 'partial' takes at least one argument

I am not entirely convinced that doing a deepcopy on a partial makes
sense, but I would expect one of:
1) An explicit exception saying it isn't allowed
2) Returning the original partial object
3) An actual copy (should the arguments its storing get deepcopied?)

P.S. This is with 2.5.2 under Linux (Ubuntu 8.04)

messages: 76200
nosy: kfitch
severity: normal
status: open
title: Deepcopy of functools.partial gives wierd exception
type: behavior
versions: Python 2.5

Python tracker <report at bugs.python.org>

More information about the Python-bugs-list mailing list