Issue1277718
This issue tracker has been migrated to GitHub,
and is currently read-only.
For more information,
see the GitHub FAQs in the Python's Developer Guide.
Created on 2005-08-31 20:10 by jaginsberg, last changed 2022-04-11 14:56 by admin. This issue is now closed.
Messages (2) | |||
---|---|---|---|
msg26164 - (view) | Author: Joshua Ginsberg (jaginsberg) | Date: 2005-08-31 20:10 | |
Howdy -- I have a class that has an attribute that is a dictionary that contains an object that has a kword argument that is a lambda. Confused yet? Simplified example: import copy class Foo: def __init__(self, fn=None): self.fn = fn class Bar: d = {'foobar': Foo(fn=lambda x: x*x)} def cp(self): self.xerox = copy.deepcopy(self.d) When I execute: b = Bar() b.cp() Using Python version: Python 2.3 (#1, Sep 13 2003, 00:49:11) [GCC 3.3 20030304 (Apple Computer, Inc. build 1495)] on darwin I get: Traceback (most recent call last): File "<stdin>", line 1, in ? File "<stdin>", line 5, in cp File "/System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/copy.py", line 179, in deepcopy y = copier(x, memo) File "/System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/copy.py", line 270, in _deepcopy_dict y[deepcopy(key, memo)] = deepcopy(value, memo) File "/System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/copy.py", line 179, in deepcopy y = copier(x, memo) File "/System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/copy.py", line 307, in _deepcopy_inst state = deepcopy(state, memo) File "/System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/copy.py", line 179, in deepcopy y = copier(x, memo) File "/System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/copy.py", line 270, in _deepcopy_dict y[deepcopy(key, memo)] = deepcopy(value, memo) File "/System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/copy.py", line 206, in deepcopy y = _reconstruct(x, rv, 1, memo) File "/System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/copy.py", line 338, in _reconstruct y = callable(*args) File "/System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/copy_reg.py", line 92, in __newobj__ return cls.__new__(cls, *args) TypeError: function() takes at least 2 arguments (0 given) I've googled for deepcopy and lambda and found somebody else asking the same question on a LUG somewhere, but they gave no advice and nobody else seems to have run into this. Any ideas on what the problem is/how to get around it? Thanks! -jag |
|||
msg26165 - (view) | Author: Terry J. Reedy (terry.reedy) * | Date: 2005-09-01 21:38 | |
Logged In: YES user_id=593130 Python does not have lambdas. It has functions. Among other ways, they can be produced by lambda expressions. The *only* residue of lambda origin is the otherwise invalid .func_name '<lambda>'. General bug-seeking advice: 1. If you can, upgrade to at least 2.3.5, the last 2.3 series release, with its several bug fixes. 2. If at all possible, test code with the lastest release. Each release has numerous bug fixes. (But not needed here.) 3. Reduce code to the minimum needed to get the apparent buggy behavior. You code is mostly noise for this purpose. I believe copy.deepcopy(lambda x: x) would be sufficient to get an exception. 4. Read (or reread) the manual for the modules and methods giving you trouble. From http://docs.python.org/lib/module-copy.html and from http://www.python.org/doc/2.3/lib/module-copy.html: "This version does not copy types like module, class, function..." |
History | |||
---|---|---|---|
Date | User | Action | Args |
2022-04-11 14:56:12 | admin | set | github: 42328 |
2005-08-31 20:10:27 | jaginsberg | create |