腌制后的np.ndarray会从转储函数中增加引用计数器,但是引用计数永远不会减少。
Python 3.6.4 Anaconda 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
由于在pickler dumps函数中发生Py_DECREF,我希望输出为2、2,但是它仍然存在。
输出为2、3,我无法修复。我正在疯狂地泄漏记忆。
当前正在研究_pickle.c。
答案 0 :(得分:0)
您遇到了this specific bug,并且仅在Numpy 1.16.0中是回归。为支持a new pickle protocol 5而添加的新代码在后备情况下泄漏了对绑定的__reduce__
方法的引用。
您可以等待该bug修复并发布1.16.1,或者返回Numpy 1.15.4。