[Python-Dev] PEP 362: 4th edition

Yury Selivanov yselivanov.ml at gmail.com
Mon Jun 18 20:09:17 CEST 2012


On 2012-06-18, at 1:35 PM, PJ Eby wrote:

> On Fri, Jun 15, 2012 at 5:03 PM, R. David Murray <rdmurray at bitdance.com> wrote:
> On Fri, 15 Jun 2012 22:48:42 +0200, Victor Stinner <victor.stinner at gmail.com> wrote:
> > > 1. Should we keep 'Parameter.implemented' or not.  *Please vote*
> 
> -1 to implemented.
> 
> > I still disagree with the deepcopy. I read somewhere that Python
> > developers are consenting adult. If someone really want to modify a
> > Signature, it would be nice to provide a simple method to copy it. But
> > I don't see why it should be copied *by default*. I expect that
> > modifying a signature is more rare than just reading a signature.
> 
> The issue isn't "consenting adults", the issue is consistency.
> Without the deepcopy, sometimes what you get back from the
> inspect function is freely modifiable and sometimes it is not.
> That inconsistency is a bad thing.
> 
> Then just copy the signature itself; as currently written, this is going to copy the annotation objects, which could produce weird side-effects from introspection.  Using deepcopy seems like overkill when all that's needed is a new Signature instance with a fresh OrderedDict.

That's an excerpt from Signature.__deepcopy__:

     cls = type(self)
     sig = cls.__new__(cls)
     sig.parameters = OrderedDict((name, param.__copy__()) \
                           for name, param in self.parameters.items())

And Parameter.__copy__:

        cls = type(self)
        copy = cls.__new__(cls)
        copy.__dict__.update(self.__dict__)
        return copy

So we don't recursively deepcopy parameters in Signature.__deepcopy__
(I hope that we don't violate the deepcopy meaning here)

> Or, better yet: make signature and parameter objects immutable (along with the OrderedDict) and the whole problem of modification and copying goes away altogether.  Or is there some reason not mentioned in the PEP why mutability is necessary?  (The PEP provides no rationale at present for making any part of a signature mutable)

The rationale is that sometimes you need to modify signatures.
For instance, in decorators.

-
Yury


More information about the Python-Dev mailing list