On Oct 17, 2008, at 1:03 PM, Aaron Castironpi Brady wrote:

I'm not fluent in Java so you'll have to be the judge.

In Python:

b= 0
f( b )

No matter what, b == 0.  C doesn't guarantee this.

It does, unless f's parameter has been declared a reference parameter. (In C++, you'd do this with '&'; I didn't think it was possible in C, but it's been a long time since I've used C so maybe it is possible nowadays.)

 Does Java?

Same in Java, and in RB, and in .NET too. If f's parameter is a by- value parameter, then it acts exactly like Python. (Those languages also allow a by-reference parameter declaration, which I think Python doesn't allow, but by-value is the default.)

Further:

b= {}
c= b
f( b )

No matter what, 'c is b' is true.

Right, again, this just demonstrates that Python passes values by reference.

 C doesn't have an 'is' operator.

Well, that's literally true, but only because it doesn't have a deep equality operator like modern languages. In C, b and c would be pointers, and 'c == b' would be the equivalent of Python's 'c is b' (and would be true after the call to f, again assuming you didn't go out of your way to declare f with a by-reference parameter).

Does Java?

Yes. The behavior's the same. Same also in every other OOP language, as far as I know.

I think all we've established here is that Python always passes parameters by value, and in most other languages, passing by value is the default (but there's an option to pass by reference if you want).

Python lacks the ByRef-parameter feature, so when that's what you need to do, you'd have to wrap your value in some mutable type (like a list) and pass that instead. A little awkward, but no big deal, as there are darn few valid reasons to ever pass something by reference anyway, especially in a language with tuple packing and unpacking.

Best,
- Joe


--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to