classes and dictionaries

James Mills prologic at shortcircuit.net.au
Wed Sep 15 20:30:46 EDT 2010


On Thu, Sep 16, 2010 at 10:13 AM, Jason Swails <jason.swails at gmail.com> wrote:
> Hello everyone,
>
> I'm encountering an issue in one of my Python classes that makes extensive
> use of dictionaries.  I was under the impression that each time an object
> was instantiated, all of its variables were created in a new section of
> memory, so that if you change the value of the variable in one instance, it
> left that variable's value in another instance alone.  In the object that I
> wrote, I have 3 different dictionaries: parm_data, pointers, and formats,
> all defined in the same place.  When I load 2 instances of this object,
> parm_data and formats each take on different values between the two objects
> (as they should), but for some reason pointers does not.  I've seen this
> problem with python2.6.4 and 2.6.1 (and I believe earlier versions as well,
> but I'm not sure).  I've attached a tarball with the relevant code and a
> sample script that shows what I mean.
>
> If anyone can tell me why the dictionary from 2 different objects are
> exactly the same for pointers, but are different for, e.g. parm_data and
> formats, that would be greatly appreciated.

In short (without creating a huge thread of unnecessary chatter), if
you reference an object in 2 different dictionaries,
the values (dictionary values) will be identical.

The following example might help you understand this.

>>> class Foo(object):
...    def __init__(self, data=None):
...       self.data = {"params": data}
...
>>> a = b = object()
>>> id(a), id(b)
(3075279112L, 3075279112L)
>>> foo = Foo(a)
>>> bar = Foo(b)
>>> foo.data, bar.data
({'params': <object object at 0xb74d0908>}, {'params': <object object
at 0xb74d0908>})
>>> id(foo.data["params"]), id(bar.data["params"])
(3075279112L, 3075279112L)
>>>

cheers
James

-- 
-- James Mills
--
-- "Problems are solved by method"



More information about the Python-list mailing list