[Edu-sig] How to Think Like A Computer Scientist

kirby urner kirby.urner at gmail.com
Tue Mar 28 23:02:52 CEST 2006


On 3/28/06, John Zelle <john.zelle at wartburg.edu> wrote:
> On Tuesday 28 March 2006 09:42, kirby urner wrote:
> > So we have different levels of mutability.  A complex type which
> > doesn't allow resassignment of real and imaginary parts might look
> > like:
> >
> > Immutable:
> >
> > c = Complex(1,2)
> > c = c.real(3)  # assigning a new value
> > c = c.imag(4) # yet another new value
> >
>
> Actually is a mutable version. Allowing the change to the components after
> creation makes it mutable. It does not matter if the change is through
> mutating methods or by direct attribute access. The point is that the object
> itself changes. If two variables reference the same object (or two threads
> manipulate it) they will both see the changes.
>
> An immutable complex would simply disallow changes. To "change" either
> component would require creation of a new object.

But the above doesn't allow any change to a complex number.  Rather,
c.imag(3) outputs a new complex number, leaving c unchanged.  Except I
immediately reassign the new value to c.

Something like:

class Complex(object):

     def __init__(self, v, z):
           self.r = v
           self.i = z

     def imag(v):
           return Complex(self.r, v)

     def real(v):
           return Complex(v, self.i)

      # plus code to make i, r read-only.

Just plain c.imag(3) would not change c, plus the returned value would
be lost, given there's no assignment.

Sorry if my example was unclear.

Kirby


More information about the Edu-sig mailing list