You're doing two different things. When you do
x['key'].remove('a')
you mutate the object that x['key']
references. If another variable references the same object, you'll see the change from that point of view, too:
However, in the second case, the situation is different:
If you do
y['user']='guest'
you rebind y['user']
to a new object. This of course does not affect x['user']
or the object it references.
This has nothing to do with mutable vs. immutable objects, by the way. If you did
x['key'] = [1,2,3]
you wouldn't change y['key']
either:
See it interactively on PythonTutor.com.