Tuples and immutability
Gregory Ewing
greg.ewing at canterbury.ac.nz
Sat Mar 8 19:40:28 EST 2014
Ian Kelly wrote:
> class LessThanFilter:
>
> def __init__(self, the_list):
> self._the_list = the_list
>
> def __getitem__(self, bound):
> return [x for x in self._the_list if x < bound]
>
>
> filter = LessThanFilter([10, 20, 30, 40, 50])
> filter[25] += [15, 17, 23]
>
> Should that last line not raise an exception?
In this case it will fail to catch what is probably an error,
but you can't expect the language to find all your bugs for
you. If you wrote the same bug this way:
filter[25].extend([15, 17, 23])
it wouldn't be caught either.
What's happening is that we're trying to use the syntax
a += b to mean two different things:
1) Shorthand for a = a + b
2) A way of expressing an in-place modification, such
as a.extend(b)
Case (2) is not really an assignment at all, so arguably
it shouldn't require the LHS to support assignment.
--
Greg
More information about the Python-list
mailing list