This isn't caused by str.decode. When you enter an object in the interactive shell, it prints the representation of that object, not the object itself. For some types, like integers, these display the same thing:
>>> i = 42
>>> i
42
>>> print(repr(i))
42
>>> print(i)
42
For other types, like strings, they display two different things:
>>> s = 'Flügel'
>>> s
'Fl\x81gel'
>>> print(repr(s))
'Fl\x81gel'
>>> print(s)
Flügel
Similarly with a Unicode object:
>>> u = s.decode('cp437')
>>> u
u'Fl\xfcgel'
>>> print(repr(u))
u'Fl\xfcgel'
>>> print(u)
Flügel
It may be helpful (or confusing) to note that in the case of strings and Unicode objects, the object's representation is the Python code to instantiate it. This may be clearer with a demonstration using datetime.datetime, which adopts the same paradigm:
>>> d = datetime.datetime(2012, 12, 20, 23, 59, 59)
>>> d
datetime.datetime(2012, 12, 20, 23, 59, 59)
>>> print(repr(d))
datetime.datetime(2012, 12, 20, 23, 59, 59)
>>> print(d)
2012-12-20 23:59:59
print(repr(s))LC_ALL=de_DE.cp437 python