semantics of the |= operator

2008-08-21 Thread akva
Hi All,

what's the exact semantics of the |= operator in python?
It seems that a |= d is not always equivalent to a = a | d

For example let's consider the following code:

def foo(s):
   s = s | set([10])

def bar(s):
   s |= set([10])

s = set([1,2])

foo(s)
print s # prints set([1, 2])

bar(s)
print s # prints set([1, 2, 10])

So it appears that inside bar function the |= operator modifies the
value of s in place rather than creates a new value.
I'm using Python 2.5

Thanks everybody,
Vitali
--
http://mail.python.org/mailman/listinfo/python-list


Re: semantics of the |= operator

2008-08-22 Thread akva
thanks all,

>Yes. That's the exact purpose of the in-place operators when they deal with
>mutable objects. What else did you expect?

well, frankly I expected a |= b to mean exactly the same as a = a | b
regardless of the object type.

> The manual explicitly specifies that mutable objects may implement the
> operation part of operation-assignments by updating in place  -- so that
> the object assigned is a mutated version of the original rather than a
> new object.

could you please refer me a link where this is specified? I couldn't
find it
in python documentation

> This has nothing to do with being inside a function.

yes, I know. maybe my example is a bit too verbose. could avoid using
functions.
But you got my main point. I found it somewhat counter-intuitive that
operation-assignments
can modify value in place.

Regards,
Vitali
--
http://mail.python.org/mailman/listinfo/python-list


Re: semantics of the |= operator

2008-08-24 Thread akva
thanks everybody.
--
http://mail.python.org/mailman/listinfo/python-list