var or inout parm?
Hrvoje Niksic
hniksic at xemacs.org
Fri Dec 12 08:34:17 EST 2008
sturlamolden <sturlamolden at yahoo.no> writes:
> On Dec 12, 1:44 pm, "Chris Rebert" <c... at rebertia.com> wrote:
>
>> Python begs to differ, as those two statements are both semantically
>> identical in this case:
>
> That is because integers are immutable. When x += 1 is done on an int,
> there will be a rebinding. But try the same on say, a numpy array, and
> the result will be different:
The result will be different, but a still occurs! You usually don't
notice it because augmented assignments with side effect are normally
careful to return the same object, so rebinding is a no-op. But in
some cases, that can byte you. For example, tupleobj[0] += 1 raises
an exception even when tupleobj[0] is mutable. Taking the numpy
example:
>>> import numpy
>>> t = (numpy.zeros(10),)
>>> t
(array([ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]),)
>>> t[0] += 1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
Of course, the side effect occurs before the exception, so:
>>> t[0]
array([ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
More information about the Python-list
mailing list