Lists and Tuples and Much More
Scott
s_broscious at comcast.net
Fri Apr 13 07:09:44 EDT 2007
"7stud" <bbxx789_05ss at yahoo.com> wrote in message
news:1176422546.385731.172910 at d57g2000hsg.googlegroups.com...
>> Yes. Tuples are immutable - once created, they can't change.
>
> Just to explain that statement a little better. If you do this:
>
>
> t = (1, 2, ["red", "white"])
> t[2].append("purple")
> print t #(1, 2, ['red', 'white', 'purple'])
>
>
> It sure looks like t changed, and therefore t is NOT immutable--and
> the whole "tuples are immutable" mantra is a lie. However, the list
> itself isn't actually stored inside t. What's stored inside t is
> python's internal id for the list. So suppose python gave the list
> the internal id: 10008. The tuple really looks like this:
>
> t = (1, 2, <10008>)
>
> And no matter what you do to the list: append() to it, sort() it,
> etc., the list's id remains the same. In that sense, the tuple is
> immutable because the id stored in the tuple never changes.
>
> In actuality, the numbers 1 and 2 aren't stored in the list either--
> python has internal id's for them too, so the tuple actually looks
> like this:
>
> t = (<56687>, <93413>, <10008>)
> | | |
> | | |
> | | |
> V V V
> 1 2 ["red", "white", "purple"]
>
>
> Because of that structure, you can create situations like this:
>
>>>> lst = ["red", "white"]
>>>> t1 = (1, 2, lst)
>>>> t2 = (15, 16, lst)
>>>> print t1
> (1, 2, ['red', 'white'])
>>>> print t2
> (15, 16, ['red', 'white'])
>>>> lst.append("purple")
>>>> print lst
> ['red', 'white', 'purple']
>>>> print t1
> (1, 2, ['red', 'white', 'purple'])
>>>> print t2
> (15, 16, ['red', 'white', 'purple'])
>>>>
>
> lst, t1, and t2 all refer to the same list, so when you change the
> list, they all "see" that change. In other words, the names lst,
> t1[2], and t2[2] all were assigned the same python id for the original
> list ["red", "white"]. Since all those names refer to the same list,
> any of those names can be used to change the list.
*********************************************************************
This is exactly the type of explaination I'm looking for. Thank you much!!!
More information about the Python-list
mailing list