Modifying Class Object

MRAB python at mrabarnett.plus.com
Mon Feb 8 03:07:55 CET 2010


Alf P. Steinbach wrote:
> * Chris Rebert:
>> On Sun, Feb 7, 2010 at 5:05 PM, T <misceverything at gmail.com> wrote:
>>> Ok, just looking for a sanity check here, or maybe something I'm
>>> missing.  I have a class Test, for example:
>>>
>>> class Test:
>>>    def __init__(self, param1, param2, param3):
>>>        self.param1 = param1
>>>        self.param2 = param2
>>>        self.param3 = param3
>>>
>>> Next, I have a dictionary mytest that contains instances of Test.  If
>>> I want to modify one of the Test instances within my dictionary, I
>>> have to rewrite the entire entry, correct (since Python passes by
>>> value, not reference)?
>>
>> Incorrect; Python uses neither. See
>> http://effbot.org/zone/call-by-object.htm for a excellent explanation
>> of what Python does use.
> 
> Hm. While most everything I've seen at effbot.org has been clear and to 
> the point, that particular article reads like a ton of obfuscation.
> 
> Python passes pointers by value, just as e.g. Java does.
> 
> There, it needed just 10 words or so. :-) Or perhaps some more words to 
> point out that in the Java language spec those reference values are 
> called pointers, but that this terminology isn't (apparently) used for 
> Python, and isn't even well known among Java programmers. But that's 
> just one extra little para.
> 
> One just has to be clear about exactly what it is that's passed by value.
> 
> Not Python objects, but references (pointers) to them, the id(o) values.
> 
A reference is not the same as a pointer.

A pointer tells you where something is; a reference doesn't.



More information about the Python-list mailing list