"Francesco Loffredo" <f...@libero.it> wrote
lst = []
for n in range(3):
obj = {}
I didn't know that this creates a new obj if obj already exists, I
thought it would just update it. That's my mistake.
Yes you have to remember that in Python, unlike C etc,
names are not aliases for memory locations. They are keys
into a namespace dictionary. So the value that the dictionary
refers to can change for any given name - even the type of
object can change.
Does this mean that if I write:
obj = {}
obj = {}
obj = {}
then I'll create 3 different dictionaries, with the name obj
referring
to the third?
Yes and the first and second will be garbage collected since
there is nothing referring to them now.
obj[n] = str(n)
lst.append(obj)
Creats a list of 3 distinct dictionaries but only uses one name -
obj.
Ok, this does not lose too much in elegance.
Yes and I could have made it even more elegant with:
lst = []
for n in range(3):
lst.append({n:str(n)}) # no explicit object name needed at all!
And even more tight with:
lst = [ {n:str(n)} for n in range(3)]
HTH,
--
Alan Gauld
Author of the Learn to Program web site
http://www.alan-g.me.uk/
_______________________________________________
Tutor maillist - Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor