Я использую python 2.7 и пытаюсь рассолить объект. Мне интересно, какова реальная разница между протоколами рассола.
import numpy as np
import pickle
class data(object):
def __init__(self):
self.a = np.zeros((100, 37000, 3), dtype=np.float32)
d = data()
print "data size: ", d.a.nbytes/1000000.
print "highest protocol: ", pickle.HIGHEST_PROTOCOL
pickle.dump(d,open("noProt", 'w'))
pickle.dump(d,open("prot0", 'w'), protocol=0)
pickle.dump(d,open("prot1", 'w'), protocol=1)
pickle.dump(d,open("prot2", 'w'), protocol=2)
out >> data size: 44.4
out >> highest protocol: 2
то я обнаружил, что сохраненные файлы имеют разные размеры на диске:
-
noProt
: 177.6MB -
prot0
: 177.6MB -
prot1
: 44.4MB -
prot2
: 44.4MB
Я знаю, что prot0
является читаемым человеком текстовым файлом, поэтому я не хочу его использовать.
Я полагаю, что протокол 0 задан по умолчанию.
Интересно, какая разница между протоколами 1 и 2, есть ли причина, по которой я должен был выбрать тот или иной?
Чем лучше использовать, pickle
или cPickle
?