This is a somewhat unintuitive behavior of variables. This is because in Python, variables always refer to values.
Boxes and tags
In some languages, we tend to think of variables as “boxes,” where we put values; in Python, however, they are links and behave like tags or "aliases" to values. So, when you assign 1 to item , you only change the reference to the variable, not the list that it points to.
A graphical representation may help. Below is the list created by alist = [[1,2], [3,4], [5,6]]

Given this, let's see what happens when we complete your first cycle.
First cycle
When you perform for item in alist , you ask the translator to take each value from the list, one at a time, put it in the item variable and perform some operation on it. In the first operation, for example, we have this new scheme:

Please note that we do not copy subscriptions to item ; instead, we point to it through item . Then do item = 1 - but what does that mean? This means that we are doing item on a value of 1 instead of pointing to a sublist:

Note that the old link is lost (this is a red arrow), and now we have a new one. But we just changed the variable pointing to the list — we did not change the list itself.
Then we enter the second iteration of the loop, and now item points to the second sublist:

When we execute item = 1 , again, we just make the point variable for the aonther value without changing the list:

Now, what happens when we execute the second cycle?
Second cycle
The second cycle begins as the first: we make item link to the first subscription:

The first difference, however, is what we call item.append() . append() is a method, so it can change the value of the object that it calls. As we say, we send a message to the object pointed to by item to add the value 10. In this case, the operation is not performed in the variable item , but directly in the object to which it refers! So here is the result of calling item.append() :

However, we are not only adding the value to the list! We also assign the value returned by item.append() . This will break the item link to the sublist, but here's the catch: append() returns None .

Value None
None is a value that basically represents the unavailability of the corresponding value. When a function returns None , it says most of the time: "I have nothing important to get you back." append() changes its list directly, so it has nothing to return.
This is important because you probably thought that item would point to an added list [1, 2, 10] , right? No, now he points to None . So, you expect the code below ...
alist = [[1,2], [3,4], [5,6]] for item in alist: item = item.append(10) print(item)
To print something like this:
[1, 2, 10] [3, 4, 10] [5, 6, 10]
But this does not happen. Here's what happens:
>>> alist = [[1,2], [3,4], [5,6]] >>> for item in alist: ... item = item.append(10) ... print(item) ... None None None
However, as we commented, the append() method changed the lists themselves. So, while the item variable was useless after the assignment, the final list was changed!
>>> print alist [[1, 2, 10], [3, 4, 10], [5, 6, 10]]
If you want to use the added list inside the loop, just don’t assign the return value of the item method. Do it:
>>> alist = [[1,2], [3,4], [5,6]] >>> for item in alist: ... item.append(10) ... print item ... [1, 2, 10] [3, 4, 10] [5, 6, 10]
This works because item will still point to a list.
Conclusion
The links are somewhat complicated to understand at first, not to mention dominance. However, they are really effective and can be studied if you follow the examples, etc. Your example is a bit more complicated because more is going on here.
A Python mentor can help you understand what is happening because it performs each step graphically. Check your own code there!