On 2009-06-11, Brendan <brendandetra...@yahoo.com> wrote: > Can someone please explain what is happening in the output below? The > number 3 never gets printed. Does Python make a copy of a list before > it iterates through it?:
You can see what is happening by printing the list as you work through the loop: >>> e = range(1,5) >>> for i in e: ... print e ... print i ... if i == 2 : ... e.remove(i) ... [1, 2, 3, 4] 1 [1, 2, 3, 4] 2 [1, 3, 4] 4 first loop: i = 0 e[i] = e[0] = 1 second loop i = 1 e[i] = e[1] = 2 third loop i = 2 e[i] = e[2] = 4 > number 3 never gets printed. Does Python make a copy of a list before > it iterates through it?: No, complex types are passed by reference unless explicity copied. You can do what you want by making an explicit copy before entering the loop: >>> e = range(1,5) >>> for i in e[:]: ... print e ... print i ... if i == 2 : ... e.remove(i) ... [1, 2, 3, 4] 1 [1, 2, 3, 4] 2 [1, 3, 4] 3 [1, 3, 4] 4 -- http://mail.python.org/mailman/listinfo/python-list