Memory leak when using pickle loading in python3

Viewed 320

I tried to load a large pickle file named m.pkl (about 81M) for several times. After loaded each time, the memory usage continuously increased. But if I add m = None before loading, the memory usage became normal. Why?

#!/usr/bin/env python3

import pickle

from memory_profiler import profile

m = None


def do():
    global m
    # m = None
    with open('./m.pkl', 'rb') as f:
        m = pickle.load(f)


@profile
def main():
    do()
    do()
    do()
    do()
    do()
    do()
    do()
    do()
    do()
    do()
    do()
    do()
    do()
    do()
    do()
    do()
    do()


main()

Line #    Mem usage    Increment   Line Contents
================================================
    17     12.1 MiB     12.1 MiB   @profile
    18                             def main():
    19    406.7 MiB    394.6 MiB       do()
    20    615.4 MiB    208.7 MiB       do()
    21    615.5 MiB      0.1 MiB       do()
    22    683.0 MiB     67.5 MiB       do()
    23    676.4 MiB      0.0 MiB       do()
    24    678.4 MiB      1.9 MiB       do()
    25    694.5 MiB     16.1 MiB       do()
    26    694.8 MiB      0.3 MiB       do()
    27    694.8 MiB      0.0 MiB       do()
    28    696.0 MiB      1.3 MiB       do()
    29    697.4 MiB      1.4 MiB       do()
    30    698.0 MiB      0.5 MiB       do()
    31    695.7 MiB      0.0 MiB       do()
    32    696.1 MiB      0.4 MiB       do()
    33    699.0 MiB      2.8 MiB       do()
    34    698.4 MiB      0.0 MiB       do()
    35    706.4 MiB      8.0 MiB       do()
0 Answers
Related