Mutability Cython Implementation

Mutability Cython Implementation

class sage.structure.mutability.Mutability

Bases: object

is_immutable()

Return True if this object is immutable (can not be changed) and False if it is not.

To make this object immutable use self.set_immutable().

EXAMPLE:

sage: v = Sequence([1,2,3,4/5])
sage: v[0] = 5
sage: v
[5, 2, 3, 4/5]
sage: v.is_immutable()
False
sage: v.set_immutable()
sage: v.is_immutable()
True
is_mutable()
set_immutable()

Make this object immutable, so it can never again be changed.

EXAMPLES:

sage: v = Sequence([1,2,3,4/5])
sage: v[0] = 5
sage: v
[5, 2, 3, 4/5]
sage: v.set_immutable()
sage: v[3] = 7
Traceback (most recent call last):
...
ValueError: object is immutable; please change a copy instead.
sage.structure.mutability.require_immutable(f)

A decorator that requires mutability for a method to be called.

EXAMPLES:

sage: from sage.structure.mutability import require_mutable, require_immutable
sage: class A:
...    def __init__(self, val):
...        self._m = val
...    @require_mutable
...    def change(self, new_val):
...        'change self'
...        self._m = new_val
...    @require_immutable
...    def __hash__(self):
...        'implement hash'
...        return hash(self._m)
sage: a = A(5)
sage: a.change(6)
sage: hash(a)   # indirect doctest
Traceback (most recent call last):
...
ValueError: <type 'instance'> instance is mutable, <function __hash__ at ...> must not be called
sage: a._is_immutable = True
sage: hash(a)
6
sage: a.change(7)
Traceback (most recent call last):
...
ValueError: <type 'instance'> instance is immutable, <function change at ...> must not be called
sage: from sage.misc.sageinspect import sage_getdoc
sage: print sage_getdoc(a.__hash__)
implement hash

AUTHORS:

sage.structure.mutability.require_mutable(f)

A decorator that requires mutability for a method to be called.

EXAMPLES:

sage: from sage.structure.mutability import require_mutable, require_immutable
sage: class A:
...    def __init__(self, val):
...        self._m = val
...    @require_mutable
...    def change(self, new_val):
...        'change self'
...        self._m = new_val
...    @require_immutable
...    def __hash__(self):
...        'implement hash'
...        return hash(self._m)
sage: a = A(5)
sage: a.change(6)
sage: hash(a)
Traceback (most recent call last):
...
ValueError: <type 'instance'> instance is mutable, <function __hash__ at ...> must not be called
sage: a._is_immutable = True
sage: hash(a)
6
sage: a.change(7)   # indirect doctest
Traceback (most recent call last):
...
ValueError: <type 'instance'> instance is immutable, <function change at ...> must not be called
sage: from sage.misc.sageinspect import sage_getdoc
sage: print sage_getdoc(a.change)
change self

AUTHORS:

Previous topic

Elements, Array and Lists With Clone Protocol, demonstration classes

Next topic

Sequences

This Page