On Aug 13, 2:12 am, Jonathan Gardner <[EMAIL PROTECTED]> wrote: > 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 clearlyexplainto 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: > > [EMAIL PROTECTED] = (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) = [EMAIL PROTECTED]; > $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.
Thank you Jonathan for your extensive and clear response ! I agree with you, Python's variable system is eazier to understand. Regards. -- http://mail.python.org/mailman/listinfo/python-list