By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
440,235 Members | 1,057 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 440,235 IT Pros & Developers. It's quick & easy.

Deleting objects

P: n/a
Say I have an object (foo), that contains an
array (bar) of references to other objects.

Now I want to puff some of the objects from the
array so that I remove the array element, and
destroy the oject.

but when I do:

del foo.bar[0]

Python says:
object doesn't support item deletion

So do I need to define __del__? And what would I
put there?

What if I wanted to remove the array element
but still have the object exist?

What happens if I succeed in destroying an object
that other objects still think they are referencing?

Thanks,

Toby

Jul 18 '05 #1
Share this Question
Share on Google+
3 Replies


P: n/a

<us**@domain.invalid> wrote in message
news:c5******************************@news.teranew s.com...
Say I have an object (foo), that contains an
array (bar) of references to other objects.

Now I want to puff some of the objects from the
array so that I remove the array element, and
destroy the oject.

but when I do:

del foo.bar[0]

Python says:
object doesn't support item deletion


What is the actual type of foo.bar? >>>type(foo.bar) # prints what?

tjr
Jul 18 '05 #2

P: n/a
On Wed, 2004-01-14 at 17:23, us**@domain.invalid wrote:
Say I have an object (foo), that contains an
array (bar) of references to other objects.

Now I want to puff some of the objects from the
array so that I remove the array element, and
destroy the oject. but when I do:

del foo.bar[0]

Python says:
object doesn't support item deletion


It'd be helpful if you supplied the code in question. Then again, we
wouldn't be able to let our imagination wander with what puff might
mean. <wink>

Anyway, is this the sort of thing you're talking about?

#!/usr/bin/env python

class Foo:

def __init__(self):
self.bar = []

def __str__(self):
return '<Foo><bar>%s</bar></Foo>' % (str(self.bar),)

l = range(10)

foo = Foo()
foo.bar.append(l)
del foo.bar[0]
print 'foo = %s' % (str(foo),)
print 'l = %s' % (l,)

Cheers,

// m
Jul 18 '05 #3

P: n/a
us**@domain.invalid wrote:
Say I have an object (foo), that contains an
array (bar) of references to other objects.

Now I want to puff some of the objects from the
array so that I remove the array element, and
destroy the oject.
You don't need to jump through hoops for this. All you need to do is:

del foo

If there are no other references to the object that was called foo
above, then (and only then) it will be destroyed.

Python keeps a reference count for each object. When the count hits 0
(no references pointing to object) it is destroyed.

Because of this, attributes of foo (eg foo.bar) will automatically be
destroyed when foo is destroyed (assuming they don't have references
from elsewhere).

but when I do:

del foo.bar[0]

Python says:
object doesn't support item deletion

So do I need to define __del__? And what would I
put there?
What is the type of foo.bar?

What if I wanted to remove the array element
but still have the object exist?
del foo.bar

This will remove the reference foo.bar.
What happens if I succeed in destroying an object
that other objects still think they are referencing?


Try as you might, shooting yourself in the foot is pretty hard in Python
(see above :)

--
Shalabh

Jul 18 '05 #4

This discussion thread is closed

Replies have been disabled for this discussion.