Aliasing [was Re: [Tutor] beginning to code]

Antoon Pardon antoon.pardon at vub.be
Wed Sep 27 04:59:32 EDT 2017


Op 27-09-17 om 09:38 schreef Steven D'Aprano:

No, the model that C++ and Pascal use is not different in this aspect.

> that Pascal var parameters and C++ reference variables operate the same 
> way as Python variable assignment, the *kindest* thing I can say is that 
> you are ignorant.

The kindest thing I can say about you is that you are very confused
at a specific level. A confusion that is illustrated by your 
contribution at https://mail.python.org/pipermail/python-list/2017-September/726513.html
and of which you seem to totally ignore my resonse at https://mail.python.org/pipermail/python-list/2017-September/726527.html

> Python does not have anything like C++ references and Pascal var 
> parameters, which is why you will never be able to write a swap() 
> function that operates like the classic Pascal swap procedure used as the 
> definitive test for pass-by-reference.

You keep repeating this and you keep ignoring my counter argument.
The fact that you can write a swap procedure in C++ and Pascal
is not because the parameter passing semantics are different but
because the assignment semantics are different.

I already explained that a working swap function depends on two
conditions:

1) Reference paramaters
2) A general way in which the object a name refers to can be
   modified/mutated (In a language like Pascal that is the
   assignment).

You keep asserting that not being able to write a swap means we
don't have condition (1), while ignoring we know we don't have
condition (2) in Python.

> Twice you have claimed to be able to write such a swap procedure for 
> lists. You can't. If you think you can, it is only because you have 
> misunderstood the problem and are writing something else that does 
> something different from what the Pascal version does.

I already posted code once, here it is again:

ls1 = [1, 3, 5, 7]
ls2 = [2, 4, 6]

def list_swap(lp1, lp2):

    tmp = [] # pseudo declaration

    tmp[:] = lp1 # 
    lp1[:] = lp2 #  This is more or less how array assignments work in Pascal
    lp2[:] = tmp #

print("ls1 =", ls1)
print("ls2 =", ls2)

list_swap(ls1, ls2)

print()
print("ls1 =", ls1)
print("ls2 =", ls2)




More information about the Python-list mailing list