Para um aplicativo usado por outros, você provavelmente não deve usar o pickle, pois ele não é salvo para carregar dados de pickle de fontes não confiáveis (alternativamente, você teria que ter 100% de certeza de que os dados não poderiam ser alterados no disco entre escrever e ler) ).
Se os dados precisarem ser modificados pelos usuários, dê uma olhada em YAML . Uma implementação em Python está disponível através do PyYAML , mas um emissor com melhor saída legível seria pyaml .
As alternativas são JSON e com mais XML de trabalho.
Tudo isso requer que você faça traduções de e para tipos internos para os tipos suportados pelo formato de armazenamento (dicionários / mapas, listas, tipos primitivos (ints, strings, boolean)).
O YAML também suporta tipos definidos pelo usuário com os mesmos problemas de segurança que os dados em Python, mas pelo menos permite um carregamento seguro, algo que o pickle não suporta. YAML, através dos tipos de usuários explícitos, tem menos problemas ao carregar dados depois de alterar seu layout de origem (renomeando módulos, movendo classes) como você pode experimentar com o pickle.