Shane Hathaway wrote:

> Michael wrote:
>> sorry, I'm used to working in c++ :-p
>> 
>> if i do
>> a=2
>> b=a
>> b=0
>> then a is still 2!?
>> 
>> so when do = mean a reference to the same object and when does it
>> mean make a copy of the object??
> 
> To understand this in C++ terms, you have to treat everything,
> including simple integers, as a class instance, and every variable is
> a reference (or "smart pointer".)  The literals '0' and '2' produce
> integer class instances rather than primitive integers.  Here's a
> reasonable C++ translation of that code, omitting destruction issues:
> 
> class Integer
> {
> private:
>     int value;
> public:
>     Integer(int v) { value = v; }
>     int asInt() { return value; }
> }
> 
> void test()
> {
>     Integer *a, *b;
>     a = new Integer(2);
>     b = a;
>     b = new Integer(0);
> }
> 
A closer translation would be:

const Integer CONST0(0);
const Integer CONST2(2);

void test()
{
    const Integer *a, *b;
    a = &CONST0;
    b = a;
    b = &CONST2;
}

The constant integers are created in advance, not when you do the 
assignment. Arithmetic may create new Integer objects, but when the result 
is a small integer it simply reuses an existing object.
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to