[Tutor] two ways

Liam Clarke ml.cyresse at gmail.com
Fri Nov 11 11:30:30 CET 2005


Oooh... that's a gotcha. Shi Mu - did you understand that? There is a
crucial difference as Gregor pointed out, that I missed, and I do
apologise.

On 11/11/05, Gregor Lingl <glingl at aon.at> wrote:
> Liam Clarke schrieb:
>
> >Hi Shi,
> >
> >For what you're doing, nothing at all.
> >
> >When you use a colon, slice syntax, it defaults to [start:end] so p =
> >a[:] is the same as
> >p = a[0:len(a)]
> >
> >
> >
> But in fact there is a difference. I'll show you:
>
>  >>> a=range(5)    ### creates a list-object
>  >>> id(a)             ### which has an identity
> 14716520
>  >>> p=a              ### creates the new name p for the same object
>  >>> id(p)            ### let's see
> 14716520           ### o.k. really the same
>  >>> q=a[:]          ### this names a *copy* of a q
>  >>> id(q)            ### identity?
> 14714840           ### different!
>  >>> a is p           ### check if objects named a and p are identical
> True                    ### yes
>  >>> a is q          ### check if objects named a and q are identical
> False                  ### no!
>  >>> a == q
> True                   ### but have the same "content", i. e. two
> different list-objects with the same elements
>  >>>
>  >>>    ### Beware, lists are mutable:
>  >>>
>  >>> a
> [0, 1, 2, 3, 4]
>  >>> a[1]=1001
>  >>> a
> [0, 1001, 2, 3, 4]
>  >>> p
> [0, 1001, 2, 3, 4]    ### object named a *and* p is changed
>  >>> q                     ### copy q of a is not changed!°
> [0, 1, 2, 3, 4]
>  >>>
> regards
> Gregor
>


More information about the Tutor mailing list