When am I supposed to use del in python?

后端 未结 2 1235
半阙折子戏
半阙折子戏 2020-12-19 04:40

So I am curious lets say I have a class as follows

class myClass:
    def __init__(self):
        parts = 1
        to = 2
        a = 3
        whole = 4
           


        
相关标签:
2条回答
  • 2020-12-19 05:00

    One use is to delete specific keys from a dictionary.

    >>>> food = {"apple": True, "banana": False}
    >>>> del food['banana']
    >>>> import json
    >>>> json.dumps(food)
    '{"apple": true}'
    

    I use it all the time for cleaning up dictionaries before converting them to JSON.

    0 讨论(0)
  • 2020-12-19 05:25

    Never, unless you are very tight on memory and doing something very bulky. If you are writing usual program, garbage collector should take care of everything.

    If you are writing something bulky, you should know that del does not delete the object, it just dereferences it. I.e. variable no longer refers to the place in memory where object data is stored. After that it still needs to be cleaned up by garbage collector in order for memory to be freed (that happens automatically).

    There is also a way to force garbage collector to clean objects - gc.collect(), which may be useful after you ran del. For example:

    import gc
    a = [i for i in range(1, 10 ** 9)]
    ...
    del a
    #  Object [0, 1, 2, ..., 10 ** 9 - 1] is not reachable but still in memory
    gc.collect()
    #  Object deleted from memory
    

    Update: really good note in comments. Watch for other references to the object in memory. For example:

    import gc
    a = [i for i in range(1, 10 ** 9)]
    b = a
    ...
    del a
    gc.collect()
    

    After execution of this block, the large array is still reachable through b and will not be cleaned.

    0 讨论(0)
提交回复
热议问题