user3411846
user3411846

Reputation: 248

Deleting objects in memory using Python

I am trying this approach to delete an object in python. I read the documentation of Python stating that garbage collector will automatically delete the object that is not referenced.

def check():
    class newOb():
        def __init__(self,value):
            self.value = value
            print self.value
            return None

    class ob:
        ins = {}
        def cr(self,someuniqueid,value) :
            newV = newOb(value)
            ob.ins[someuniqueid] = newV ## saving this object refernce to the ob class ins dictionary
            return newV

    #### Accessing Object ###
    someuniqueid  = 12
    c = ob()
    d = c.cr(someuniqueid,123)
    print d.value ## will print 123
    # now deleting the associated object
    del c.ins[someuniqueid]

check()

At the last step, I am removing the object reference from the memory is using above procedure will delete the object from memory

If not then what is wrong with code and how to correct it

Upvotes: 12

Views: 49318

Answers (2)

gonczor
gonczor

Reputation: 4136

I don't know what do you mean by writing:

If not then what is wrong with code and how to correct it

When you use del statement you delete a reference to an object. It will use up memory untill garbage collector is invoked. Remember that this can be a time-consuming process and not necessary if the process has enough memory to continue executing.

Generally speaking Python does not perform C++-like destructor bahaviour.

A quote from "Expert Python Programming":

The approach of such a memory manager is roughly based on a simple statement: If a given object is not referenced anymore, it is removed. In other words, all local references in a function are removed after the interpreter:

• Leaves the function

• Makes sure the object is not being used anymore.

Under normal conditions, the collector will do a nice job. But a del call can be used to help the garbage collector by manually removing the references to an object manually.

So you don't manage memory by hand. You can help garbage collector, but it's better to leave memory managment behind the scenes.

Upvotes: 8

cs95
cs95

Reputation: 402363

You would need to do del d as well, since d is also holding a reference to the same object. Calling del will only decrement the reference count and remove the particular reference from usage, but the actual in memory object is not garbage collected until the reference count hits 0.

Upvotes: 17

Related Questions