On 2:59 PM, Alan Gauld wrote:

"Francesco Loffredo" <f...@libero.it> wrote

did, Roelof's code would work perfectly, and you could store in a list
all the subsequent changes of a dictionary without calling them with
different names.

You don;'t need dfifferent names. Provided the name creates a
new object inside the loop you can reuse the same name.
Roeloff's problem was that he only created one object, outside
his loop.

lst = []
for n in range(3):
    obj = {}
    obj[n] = str(n)
    lst.append(obj)

Creats a list of 3 distinct dictionaries but only uses one name - obj.

I understand that if .append() stored a copy of the dict in the list,
you will end up with lots of copies and a huge amount of memory used by
your list, but that's exactly what will happen if you make those copies
yourself. But you wouldn't have to devise a way to generate a new name
for the dictionary every time you need to update it.

Python uses references throughout, what you are suggesting would
be a change to the normal way that Python uses names.

HTH,

Probably more importantly, if a language only implemented copies, you couldn't have references without some different syntax. On the other hand, with Python, everything's a reference, and if you want a copy, you make one when you need it. You never do for immutables, and only you know when you need it for mutable objects.

DaveA

_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to