I haven't yet seen an answer mention mutability vs. immutability, which is why you're seeing this behavior. It's a really important concept in Python, since it sort of replaces notions of "pass by reference" and "pass by value" that other languages have. See the documentation for an in-depth treatment, but I'll give a quick illustrative example here.
In Python, an int is immutable. That means that the value of an integer cannot be changed. On the other hand, lists and dicts are mutable, meaning they can be changed.
Consider these two cases:
x = (1,2,3,4,5)
for y in x:
y += 1
print x
This prints:
(1, 2, 3, 4, 5)
Here we tried to update ints, which are immutable. Hence after the for-loop, x remains unchanged. You can sort of think that at each iteration of the loop, the current entry of x is copied to y, and this copy is changed, not the entry itself. Now let's change a mutable type:
x = ([1], [2], [3], [4], [5])
for y in x:
y += [42]
print x
which prints:
([1, 42], [2, 42], [3, 42], [4, 42], [5, 42])
We see that the elements of x have changed. This is precisely because the elements of x are lists, and lists are mutable.
By the way, you might notice that the container used in both cases was a tuple, which is immutable. You can mutate mutable objects inside of a tuple -- no problem there -- you just can't mutate the tuple itself and the references it contains.
After all of this I still haven't really answered your question, but the answer's sort of implied by the above: you shouldn't store these objects separately, but in a list. Then all of the list comprehension answers given make sense and do what you'd expect.