Pickle must be able to load the class directly. Your decorator replaces the class with a factory function, making it impossible for pickle to import the class itself.
Use a separate factory function, not a decorator, returning a 'private' class (but still importable directly):
class _MyClass():
def __init__(self, arg):
self.arg = arg
def MyClass(arg, instances={}):
if arg not in instances:
instances[arg] = _MyClass(arg)
return instances[arg]