Python 3.6: почему pickle.dumps (nparray) постоянно увеличивает refcount? - PullRequest
0 голосов
/ 19 января 2019

np.ndarray, когда он выбран, увеличивает счетчик ссылок из функции dumps, однако счетчик ссылок никогда не уменьшается.

Python 3.6.4 Анаконда Ubuntu 16.04.5 LTS numpy 1.16.0

Я уже пытался преобразовать в список с помощью numpy.array.tolist (), однако этот метод слишком медленный.

import numpy as np
import pickle
import sys

a = np.ndarray((10, 10), dtype=np.uint8)
print(sys.getrefcount(a)) # 2
pickle.dumps(a)
print(sys.getrefcount(a)) # 3

Я ожидал бы, что выходной сигнал будет равен 2, 2 из-за Py_DECREF, который возникает в функции создания дампов, однако он остается.

Вывод 2, 3, и я не могу это исправить. Я теряю память как сумасшедший.

В настоящее время копается в _pickle.c.

1 Ответ

0 голосов
/ 19 января 2019

Вы столкнулись с этой конкретной ошибкой , и это регрессия только в Numpy 1.16.0.В новом коде для добавления поддержки в новом протоколе pickle 5 просочились ссылки на связанный метод __reduce__ в резервном случае.

Вы можете подождать, пока исправится эта ошибка и будет выпущена 1.16.1, или вернуться к Numpy 1.15.4.

...