这是python/jupyter中的内存泄漏吗?

这是python/jupyter中的内存泄漏吗?,python,ipython,jupyter,Python,Ipython,Jupyter,我用python编写了非常简单的代码,我正在jupyter上运行: # Cell 1 data = [] with open('test.txt', mode='r') as f: for line in f: data.append(line) 文件test.txt有3.1GB,我可以跟踪内存负载 在此之后,在下一个单元格中,我排除: # Cell 2 del data 但是内存使用不会返回到初始状态 下一个图像是我的系统监视器。在完成加载后,我立即执行了单元格,排

我用python编写了非常简单的代码,我正在jupyter上运行:

# Cell 1
data = []
with open('test.txt', mode='r') as f:
    for line in f:
        data.append(line)
文件test.txt有3.1GB,我可以跟踪内存负载

在此之后,在下一个单元格中,我排除:

# Cell 2
del data
但是内存使用不会返回到初始状态

下一个图像是我的系统监视器。在完成加载后,我立即执行了单元格,排除了变量,加载几乎达到了80%。但是在我中断了笔记本的内核后,内存才恢复

这不对吗?我认为即使在木星上,记忆也应该被释放,不是吗


我的系统是Ubuntu18.04,我使用的是miniconda和Python3.7.7。

我认为是IPython造成了这种情况。它在dict
Out
中记录您评估的所有内容。检查on
数据的结果可能很有见地。jupyter的其他部分中可能还存储了对该列表的其他引用;每一个都会有稍微不同的记忆行为。如果您声称这是ipython问题而不是jupyter,那么请检查是否可以在不运行jupyter的情况下复制它。同样,在
cell1
中的一个更简单的列表附加循环中,我得到了预期的内存循环(如系统监视器中所述)。正如其他人所指出的,分离操作系统、python和jupyter/ipython问题可能很棘手。笔记本电脑的交互性意味着它很容易搞乱一系列的单元运行。我在没有Jupyter的情况下尝试了这段代码(最后包括了睡眠)。内存被释放,没有问题。在Jupyter,我也试着重复执行。删除数据变量后,我再次开始读取该文件。内存量没有改变,所以我认为内存已经被重用了。