On Aug 12, 9:17 am, Palindrom <[EMAIL PROTECTED]> wrote: > Hi everyone ! > > I'd like to apologize in advance for my bad english, it's not my > mother tongue... > > My girlfriend (who is a newbie in Python, but knows Perl quite well) > asked me this morning why the following code snippets didn't give the > same result : > > ### Python ### > > liste = [1,2,3] > > def foo( my_list ): > my_list = [] > > foo(liste) > > print liste# she expected liste to be an empty list > > ### Perl ### > > @lst =(1,2,3); > $liste [EMAIL PROTECTED]; > foo($liste); > print "@lst\n"; > > sub foo { > my($my_list)[EMAIL PROTECTED]; > [EMAIL PROTECTED]() > > } > > I have to admit that I don't know how to clearly explain to her the > differences between these results. > Could someone please help us understand these difference between > Python and Perl ? >
David Ullrich gives a great and complete answer. I want to focus on some of the subtleties. Perl and C share a lot in common. There are "direct" variables, things like numbers and arrays. These aren't references to object, but the object is itself stored in the variable. That is, you can't talk about the thing that is '@lst' without creating a reference to it. Python, on the other hand, doesn't have direct variables. Well, it does, it is just that all of the direct variables are really pointers or references to the values they reference. Imagine a perl where you are only allowed to use scalars, and specifically, scalars that are references to object but not references to references. That is the Python variable system. To be more concrete... This statement cannot be expressed in Python: @lst = (1, 2, 3); # perl However, you can create an arrayref (perl) / list (Python) and assign a scalar (perl) / variable (Python) to reference it: $liste = [1, 2, 3]; # perl liste = [1, 2, 3] # Python Likewise, this statement cannot be expressed in Python: $refref = \$ref; # perl Although you can cheat in both perl and Python to get a similar result: $refref = [$ref] # perl refref = [ref] # python As far as the functions, the Python version and the perl version are doing two completely different things. David explains how to write a Python version that does what the perl version is doing. If you wanted a perl version that did what your python version did, it would look like this: sub foo { my ($my_list) = @_; $my_list = []; return undef; } Is Python's variable system better than perl's? It depends on which way you prefer. As for me, being a long-time veteran of perl and Python, I don't think having a complicated variable system such as perl's adds anything to the language. Python's simplicity in this regard is not only sufficient, but preferable. -- http://mail.python.org/mailman/listinfo/python-list