[Tutor] Being beaten up by a tuple that's an integer thats a tuple that may be an unknown 'thing'.

bob gailer bgailer at gmail.com
Wed Nov 4 01:06:05 CET 2009


Robert Berman wrote:
>
> In [69]: l1=[(0,0)] * 4
>
> In [70]: l1
> Out[70]: [(0, 0), (0, 0), (0, 0), (0, 0)]
>
> In [71]: l1[2][0]
> Out[71]: 0
>
> In [72]: l1[2][0] = 3
> ---------------------------------------------------------------------------
> TypeError                                 Traceback (most recent call 
> last)
>
> /home/bermanrl/<ipython console> in <module>()
>
> TypeError: 'tuple' object does not support item assignment
>
> First question, is the error referring to the assignment (3) or the 
> index [2][0]. I think it is the index but if that is the case why does 
> l1[2][0] produce the value assigned to that location and not the same 
> error message.
>
> Second question, I do know that l1[2] = 3,1 will work. Does this mean 
> I must know the value of both items in l1[2] before I change either 
> value. I guess the correct question is how do I change or set the 
> value of l1[0][1] when I specifically mean the second item of an 
> element of a 2D array?
>
> I have read numerous explanations of this problem thanks to Google; 
> but no real explanation of setting of one element of the pair without 
> setting the second element of the pair as well.
>
> For whatever glimmers of clarity anyone can offer. I thank you.

Tuples are immutable. Replace them with lists and voila. l1=[[0,0]] * 4

But also realize that you are creating a list with 4 copies of one 
object [0,0]. Assigning to one changes all!


-- 
Bob Gailer
Chapel Hill NC
919-636-4239


More information about the Tutor mailing list