To fix exactly what you had, the following works:
output = list()
cache = list()
cache = input("Please enter the number: ")
for val in str(cache): # note you do not need to cast to a str in python 3.x
output.append(int(val))
print(output)
You can simply convert the integer input into a string, and iterate over each character in the string. Python is pretty cool in that it pretty much lets you iterate over anything with the traditional for loop structure. You then append each individual part of the four digit integer - as you iterate through it - to the list (converting it back to an integer if desired).
What your original code does is append the entire integer (as defined by cache) to the new list output four different times. You were not looking at each part of the integer, but rather the integer in its entirety.
Note that you do not need to predefine cache before the assignment from input, and you can define a list using [] instead of calling the list() function. Furthermore, you should use raw_input instead of input, and then you do not need to cast the read in value to a string before processing. It is as follows:
output = []
cache = raw_input("Please enter the number: ")
for val in cache:
output.append(int(val))
print(output)
Finally, if you do not care about preserving the values of the number that you read in as integers (i.e. having them as strings is ok for you), you can simple call the list() function on the cache:
>> Enter a 4 digit number:1234
>> list(cache)
>> ['1', '2', '3', '4']
Let me know if this does the trick for you.