I believe this is a side-effect of array views in numpy, and not some mysterious repeated evaluation
On Friday, May 9, 2014, Jeff Bezanson <[email protected]> wrote: > I would argue that the python behavior of evaluating x[1:10] twice, > both before and after the first assignment operation, is very > non-sensible and non-intuitive. Every `=` in julia evaluates its > right-hand side once, and ultimately returns that value. That way when > you chain assignments you know the exact same value gets assigned > everywhere. I don't see how you can argue that this is not sensible. > > On Fri, May 9, 2014 at 3:07 AM, Keno Fischer > <[email protected] <javascript:;>> wrote: > > The python example doesn't show anything different. The matlab example > does > > in that it returns x (though not the slice assigned to). The real > difference > > to python is this: > > > >>>> x = numpy.arange(1,11) > >>>> y = x[0:9] = x[1:10] > >>>> y > > array([ 3, 4, 5, 6, 7, 8, 9, 10, 10]) > > > > so in python that means > > x[0:9] = x[1:10] > > y = x[1:10] > > > > whereas in Julia it means > > > > temp = x[1:10] > > x = temp > > y = temp > > > > > > > > > > On Fri, May 9, 2014 at 2:59 AM, Dominique Orban < > [email protected] <javascript:;>> > > wrote: > >> > >> Is that really the intended effect??? Python and Matlab seem much more > >> intuitive and return something sensible: > >> > >> >> x = [1:10]; > >> >> x(1:9) = x(2:10) > >> > >> x = > >> 2 3 4 5 6 7 8 9 10 10 > >> > >> > >> >>> import numpy > >> >>> x = numpy.arange(1,11) > >> >>> x[0:9] = x[1:10] > >> >>> x > >> array([ 2, 3, 4, 5, 6, 7, 8, 9, 10, 10]) > >> > >> > >> On Thursday, May 8, 2014 8:59:58 PM UTC-7, Jeff Bezanson wrote: > >>> > >>> Yes, it is well-defined. The right-hand side is returned, which might > >>> cause some confusion here. > >>> > >>> On Thu, May 8, 2014 at 10:10 AM, Neal Becker > >>> <[email protected]<javascript:;>> > wrote: > >>> > Is the following well-defined in julia? > >>> > > >>> > julia> x = [1:10] > >>> > 10-element Array{Int64,1}: > >>> > 1 > >>> > 2 > >>> > 3 > >>> > 4 > >>> > 5 > >>> > 6 > >>> > 7 > >>> > 8 > >>> > 9 > >>> > 10 > >>> > > >>> > julia> x[1:9] = x[2:10] > >>> > 9-element Array{Int64,1}: > >>> > 2 > >>> > 3 > >>> > 4 > >>> > 5 > >>> > 6 > >>> > 7 > >>> > 8 > >>> > 9 > >>> > 10 > >>> > > >>> > In general, are all such aliased assignments well-defined (all, as in > >>> > for > >>> > arbitrary ranges)? > >>> > > > > > >
