Модуль pickle, похоже, использует экранирующие символы строки при сортировке; это становится неэффективным, например на массивах NumPy. Рассмотрим следующее
z = numpy.zeros(1000, numpy.uint8)
len(z.dumps())
len(cPickle.dumps(z.dumps()))
Длина составляет 1133 символа и 4249 символов соответственно.
z.dumps () показывает что-то вроде "\ x00 \ x00" (фактические нули в строке), но pickle, похоже, использует функцию repr () строки, приводя к "'\ x00 \ x00'" (нулями являются ascii нули).
т.е. («0» в z.dumps () == False) и («0» в cPickle.dumps (z.dumps ()) == True)