2016-12-20 9 views
1

Учитывая следующий код:Известная ошибка в Python Pickle?

import pickle 

class Test: 
    d = {}  

    def func(self): 
     self.d['x'] = 'y' 

test = Test() 
test.func() 
pickle.dump(test, open('test.p', 'wb')) 

%reset 

import pickle 
class Test: 
    d = {}  

    def func(self): 
     self.d['x'] = 'y' 


print(pickle.load(open('test.p', 'rb')).d) 

Я бы ожидать выход

y 
y 

Однако фактический выход

y 
{} 

Это известная ошибка или я-то недоразумение?

Я использую Miniconda Python 3.5.2 на Windows.

+1

Я бы не ожидал результата, которого вы ожидаете. 'self.d' - это переменная класса. Pickle сериализует объекты, а не классы. –

+1

Каждый раз, когда вам интересно, есть ли ошибка в стандартном библиотечном модуле Python, вы можете вообще предположить, что ответ «нет, вы просто что-то не так». – TigerhawkT3

+0

'.d' не является специфичным для объекта, который вы мариновали, почему вы ожидаете его маринования вместе с объектом? –

ответ

3

От pickle documentation

... когда экземпляры класса маринованные, код и данные своего класса не маринованные вместе с ними. Только данные экземпляра маринуются.

Поведение, которое вы видите, задокументировано, а не по ошибке.