[SciPy-User] python lists in combination with numpy arrays

Martin van Leeuwen vanleeuwen.martin@gmail....
Wed Nov 10 15:25:33 CST 2010

Dear All,

I hope some of you could help me out understanding the following.
I am a little puzzled about something I found using numpy in
combination with standard python lists.
The following two methods give different outputs on my machine.
While the first method surprisingly overrides the python list instead
of appending, the second method appends as I would expect.
The only real difference between the methods is the line:

for j in range(3): a[j] = numpy.random.rand()


a = numpy.random.rand(3)

import numpy

print "first method"

a = numpy.zeros(3, dtype=float)
for i in range(2):
    for j in range(3): a[j] = numpy.random.rand()
    print "three random values:", a
    print 'current list:', lst
    print '\n'

print "second method"

for i in range(2):
    a = numpy.random.rand(3)
    print "three random values:", a
    print 'current list:', lst
    print '\n'

==========IDLE output==========
first method
three random values: [ 0.87115972  0.26259606  0.34981352]
current list: [array([ 0.87115972,  0.26259606,  0.34981352])]

three random values: [ 0.48827773  0.91841208  0.81756918]
current list: [array([ 0.48827773,  0.91841208,  0.81756918]), array([
0.48827773,  0.91841208,  0.81756918])]

second method
three random values: [ 0.88553281  0.92494531  0.34539655]
current list: [array([ 0.88553281,  0.92494531,  0.34539655])]

three random values: [ 0.87463742  0.49128832  0.89126926]
current list: [array([ 0.88553281,  0.92494531,  0.34539655]), array([
0.87463742,  0.49128832,  0.89126926])]

As you can see, in the second iteration of the first method the first
entry in the list gets overridden with the new array, and the same
array then also get appended to that list. In the second method, the
new array gets appended to the list and the first entry of the list
remains as it was.

Thanks for any help on this.


More information about the SciPy-User mailing list