I think you are misunderstanding the “:” notation for the lists.
upper[:3]gives the first 3 characters from upper whereasupper[3:]gives you the whole list but the 3 first characters.
In the end you end up with :
upperNew = upper[:3] + upper[3:]
= 'ABC' + 'DEFGHIJKLMNOPQRSTUVWXYZ'
When you sum them into upperNew, you get the alphabet.
It happens the same thing the second time in a and b, but you concatenate them in the reversed order, so you get 'DEFGHIJKLMNOPQRSTUVWXYZ' + 'ABC'+ which is probably why you seem confused.
If you want upperNew to give the same result, you have to do it this way :
upperNew = upper[3:] + upper[:3] # Note I switched the right part
print upperNew
Then 'DEFGHIJKLMNOPQRSTUVWXYZABC' is printed as expected.
solved Python: ASCII letters slicing and concatenation [closed]