More assignment/copy novice confusion

Laurent Pointal laurent.pointal at laposte.net
Sun Dec 2 13:48:09 EST 2001


[posted and mailed]

"Arthur Siegel" <ajs at ix.netcom.com> wrote in 
news:mailman.1007306883.27068.python-list at python.org:

> Given a class:
> 
>>>> class  p:
>              def __init__(self,a):
>                  self.a=a
> Then -


 
>>>> m=p([1,2,3])
>>>> r=m
>>>> m.a=([1,2,4])
>>>> m.a
> [1, 2, 4]
>>>> r.a
> [1, 2, 4]
> 
> clear enough.



> But -
> 
>>>> m=p([1,2,3])
>>>> r=p([])

Here r and m reference two **different** objects of class p, with their own 
attributes.
Try "r is m", and it will reply 0.

>>>> r.a=m.a

Here m.a and r.a, which are attributes of different objects, reference the 
same list.

>>>> m.a=[1,2,4]

And now m.a reference another list.

>>>> m.a
> [1, 2, 4]
>>>> r.a
> [1, 2, 3]

You have stored orinal m.a list into r.a and then replaced m.a list, so you 
see the original in r.a and the new in m.a. 
Its normal.



> And -
> 
>>>> m=p([1,2,3])
>>>> r=m

Here r and m reference the SAME object, so modifying m data is like 
modifying r data.
Try "r is m", and it will reply 1.

>>>> r.a=m.a

This is not needed, as r and m are the same object, r.a and m.a are the 
same.

>>>> m.a=[1,2,4]

And again, m.a is r.a as m is r.

>>>> m.a
> [1, 2, 4]
>>>> r.a
> [1, 2, 4]

Its normal.

> I know this isn't the tutorial list.  
> 
> But - on the theory that my confusion 
> on these kinds of issues is widely shared 
> among novices - I thought it worth bringing
> up for discussion, clarification.

Hope my comments help.

> Is anything here affected by the new style classes?

A-priori, no.

> 
> Art

A+

Laurent.



More information about the Python-list mailing list