Let me try to explain using some examples...
You need to pass a dictionary to some other python process that runs out of your python environment (maybe some other project or on some other machine)...
somelist = {1:1,2:2,3:3}
How can you pass this dictionary to that process? You cannot convert it to string, even if you did, you cannot convert it back to its original form...
If you pickle this dictionary it will give you
dumps({1: 1, 2: 2, 3: 3})
'(dp1\nI1\nI1\nsI2\nI2\nsI3\nI3\ns.'
which has a string-like structure... So you can send this via post, or something else... and the receiver can unpickle it to obtain the original object...
loads('(dp1\nI1\nI1\nsI2\nI2\nsI3\nI3\ns.')
{1: 1, 2: 2, 3: 3}