On Sun, 29 Aug 2010 07:44:47 -0700, ernest wrote: > Hi, > > The operator module provides separate functions for "in place" > operations, such as iadd(), isub(), etc. However, it appears that these > functions don't really do the operation in place: > > In [34]: a = 4 > > In [35]: operator.iadd(a, 3) > Out[35]: 7 > > In [36]: a > Out[36]: 4 > > So, what's the point? If you have to make the assignment yourself... I > don't understand.
The point is that if you could modify the int 4 to become 7, you would then see horrible things like this: >>> a = 4 >>> operator.iadd(a, 3) >>> 4 + 1 # the int "4" has been changed to have the value 7 8 Nobody wants that. Some very early versions of Fortran allowed that sort of thing, apparently by accident. I've been told you can get it to work with Lisp too, and Python with ctypes. You don't want to go there. That is why ints are immutable in Python, and so "in-place" operations aren't really in-place for them. Remember that 4 is an actual *object*, and so the iadd function can only see the object, not the name it is bound to. It sees 4 as the first argument, not the memory location of "a". There's no way for it to know which name you are trying to modify, or even if the object 4 is bound to any name. -- Steven -- http://mail.python.org/mailman/listinfo/python-list