Dag Sverre Seljebotn wrote: > Stefan Behnel wrote: >> Dag Sverre Seljebotn wrote: >>>> # Some ways of multiplying all elements with 2 >>>> x *= 2 >>>> x[...] *= 2 >>>> x[:,:] *= 2 >>>> x += x >>>> x[...] += x >>> OK I'll make an exception here -- I'm willing to discuss whether we >>> should depart from NumPy semantics here and let >>> >>> x2 = x >>> x *= 2 >>> >>> allocate new memory, so that x2 is not modified, being consistent with a >>> direct transformation to "x = x * 2". One can always write >>> >>> x[...] *= 2 >>> >>> if one wishes to modify original memory. >> What's wrong with >> >> x = 2 * x2 >> >> for doing a copy ? >> >> x *= 2 >> >> pretty clearly states that I want to modify x in place. > > The problem is that if you do > > y = x > x *= 2 > > then in current NumPy, y and x will still point to the same memory and > reference the same values (in fact, be the exact same view object). > > Usual Python semantics seems to imply that what NumPy *should* have done > is let the latter line mean "x = x * 2", where a new array is allocated > and the value of x*2 copied into the new array, so that x and y points > to different memory after the operation.
I stand corrected: In [13]: a = [1,2,3] In [14]: b = a In [15]: a += [1,2,3] In [16]: b Out[16]: [1, 2, 3, 1, 2, 3] OK, so this seems like a non-issue. -- Dag Sverre _______________________________________________ Cython-dev mailing list [email protected] http://codespeak.net/mailman/listinfo/cython-dev
