On 01/04/2014 02:03 PM, Steven D'Aprano wrote:
>I'm also a bit confused here: obviously tuples are immutable, but one can
>use lists in them... I think that makes those lists' contents immutable?
Nope. It makes the tuple immutable in the sense that it's *direct*
contents cannot be changed, but mutable in the sense that the contents
of the tuple can be mutated.

py> t = (1, 2, [])
py> t[2] = ["hello"]
Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
py> t[2].append("hello")
py> t
(1, 2, ['hello'])


>And could one define a namedtuple that included lists that were different
>lengths for different instantiations (like my game results, for example)?
Naturally. The nametuple doesn't care what you put inside it.

I used to explain this by making people note that there 2 ways of *changing* a given item (or field, or any var for the matter), if its value is complex & mutable: *replacing* vs *modifying*:

        l = [1,2,3]
        l = [1,0,3]     # replace (by brand new value/object)
        l[1] = 0        # modify (the value/object itself)

When a symbol's value is simple or mutable, one can only replace it. (You can change _only_ the second digit of "123", or its n-th bit in binary representation, or the fractional part of "-123.45", less so its sign ;-).

Denis
_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor

Reply via email to