questions regarding assignement and copy

Robert Kern robert.kern at gmail.com
Wed Oct 18 12:12:37 CDT 2006


David Cournapeau wrote:

>     bar   += 1
>     print bar is foo
> 
>     prints True
> 
>     But if I do bar = bar + 1, then bar is not a copy of foo anymore. Is 
> this intended ?

Yes, very much so! If it were otherwise Guido would never have added the 
augmented assignment operators. From the reference manual:

http://docs.python.org/ref/augassign.html

"""An augmented assignment expression like x += 1 can be rewritten as x = x + 1 
to achieve a similar, but not exactly equal effect. In the augmented version, x 
is only evaluated once. Also, when possible, the actual operation is performed 
in-place, meaning that rather than creating a new object and assigning that to 
the target, the old object is modified instead."""

> This looks really confusing to me, and I would like to 
> know what the precise rules about copy vs alias are ?

I'm not going to go through all of the functions in numpy, but here are some 
(unorganized) rules of thumb:

* Any operations with regular operators + - / * // ** ~ ^ & | << >> < > == <=, 
etc. will put their results into new arrays. If the expression is on the RHS of 
a regular assignment, just ignore the LHS of the assignment; even if the name on 
the LHS is the same as a name on the RHS, the expression is evaluated, the new 
array is created and *then* the new array is assigned to the LHS name.

* Augmented assignment operators will operate in-place.

* Functions and methods should state that they operate in-place in their docstrings.

* The asarray(), asanyarray(), etc. functions will return the input array if it 
is already suitable.

* Slicing, reshaping, transposing and similar structural operations create new 
array objects, but they are generally views, not copies of the data.

-- 
Robert Kern

"I have come to believe that the whole world is an enigma, a harmless enigma
  that is made terrible by our own mad attempt to interpret it as though it had
  an underlying truth."
   -- Umberto Eco


-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642




More information about the Numpy-discussion mailing list