>>> import pickle; pickle.loads(b"cos\nsystem\n(S'whoami'\ntR.")
timo
Ow, toch niet veiliger :-)
Het verschil zit in de strings tussen Python2 en Python3. In Python2 is de standaard str een bytestring en in Python3 een unicode string. pickle.loads() verwacht blijkbaar een bytestring en geeft een error.
Er is dus helemaal niets veranderd in pickle zelf.
Afhankelijk van wat er bewaard moet blijven zijn er andere en betere oplossingen dan pickle.