42

I want a Roach class to "die" when it reaches a certain amount of "hunger", but I don't know how to delete the instance. I may be making a mistake with my terminology, but what I mean to say is that I have a ton of "roaches" on the window and I want specific ones to disappear entirely.

I would show you the code, but it's quite long. I have the Roach class being appended into a Mastermind classes roach population list.

1
  • 10
    del <instance> ? Commented May 22, 2013 at 8:17

3 Answers 3

25

In general:

  • Each binding variable -> object increases internal object's reference counter
  • there are several usual ways to decrease reference (dereference object -> variable binding):

    1. exiting block of code where variable was declared (used for the first time)
    2. destructing object will release references of all attributes/method variable -> object references
    3. calling del variable will also delete reference in the current context
  • after all references to one object are removed (counter==0) it becomes good candidate for garbage collection, but it is not guaranteed that it will be processed (reference here):

CPython currently uses a reference-counting scheme with (optional) delayed detection of cyclically linked garbage, which collects most objects as soon as they become unreachable, but is not guaranteed to collect garbage containing circular references. See the documentation of the gc module for information on controlling the collection of cyclic garbage. Other implementations act differently and CPython may change. Do not depend on immediate finalization of objects when they become unreachable (ex: always close files).

Sign up to request clarification or add additional context in comments.

Comments

13

You cannot force a Python object to be deleted; it will be deleted when nothing references it (or when it's in a cycle only referred to be the items in the cycle). You will have to tell your "Mastermind" to erase its reference.

del somemastermind.roaches[n]

Comments

1
for i,roach in enumerate(roachpopulation_list)
        if roach.hunger == 100
            del roachpopulation_list[i]
            break

Remove the instance by deleting it from your population list (containing all the roach instances.

If your Roaches are Sprites created in Pygame, then a simple command of .kill would remove the instance.

2 Comments

can you also not do the numeration, and just roachpopulation_list.remove(roach), then del roach? It seems to me both approaches should be equivalent, but I'm not sure
You could use any of the functions in Python to remove the instance from the list, like delete, remove, pop etc. Once an instance is no longer stored in a list or dictionary or variable etc, it's forgotten.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.