On 04/06/2015 15:37, Grant Edwards wrote:
On 2015-06-04, Marko Rauhamaa <ma...@pacujo.net> wrote:
Steven D'Aprano <st...@pearwood.info>:

But you still find a few people here and there who have been exposed
to Java foolishness, and will argue that Python is "pass by value,
where the value is an implementation dependent reference to the thing
that you thought was the value".

Why fight terminology? Definitions can't be proved right or wrong.

Anyway, I would say Python definitely is in the classic pass-by-value
camp. Here's a simple test:

    def f(x):
        x = 3

    y = 1
    f(y)
    print(y)

If it prints 1, it's pass by value. If it prints 3, it's pass by
reference.

Somebody else might just as honestly say that it's pass by reference:

def f(x):
     x[2] = 2;

x = ['a','b','c']
f(x)
print(x)

If it prints ['a','b','c'], it's pass by value.  If it's pass by
reference, it prints ['a', 'b', 2].

IMO, it's pass by reference.

No, it's not. Pass-by-reference specifically means (as Steven D'Aprano pointed out some weeks back in another thread) that you can directly change the caller's 'variable' so that it becomes something else, such as a string.

In your example, the caller's x is still a list. And the same list (assign it to y before the call. y will be ['a','b','2'] too, and (x is y) is True).

To modify, mutate or in any way update the data associated with the caller's argument, pass-by-reference is not needed. But it's not exactly pass-by-value either.

In a language like Python, such a limited choice would be too naive, because pointers and references are also used internally and transparently, and they help to confuse matters.

If you want to call it something, perhaps call it call-by-handle. Because a handle to the data is being passed. In the same way that if X is a handle to a file, a window, image, or any external resource, then:

  func(X)

might update the file, draw into the window or image or whatever, but no-one would be talking about whether that file or window is passed by value or by reference!

--
Bartc

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

Reply via email to