What you are appending to your list is not a copy of the dictionary interface_status but the dictionary itself. Then when you run interface_status['name'] = 'second' you are changing the value on the dictionary (again, not making a copy of it with a different key-value pair).
Here is a simple example to show what I mean:
>>> d = {'name':'first'}
>>> l = []
>>> l.append(d)
>>> l
[{'name': 'first'}]
>>> d['name'] = 'second'
>>> l
[{'name': 'second'}]
You can see that when I change what is going on in my dictionary d, it changes what shows up inside of the list l because the whole dictionary is inside of l.
This seems be happening because when you run d['name'] = 'asdf' in that format, you are updating the value on the dictionary.
You could instead run it all like this to get what you want - you'll see that we just fully recreate the interface_status dictionary each time. (as a side note, probably want to avoid naming the function and the dictionary the exact same thing.
def interface_status():
    interface_list = ['first', 'second']
    temp_interface = []
    for item in interface_list:
        interface_status = {'name':item}
        temp_interface.append(interface_status)
    print(temp_interface)
    
interface_status()