How to best explain a "subtle" difference between Python and Perl ?

Demarche Bruno demarcheb at gmail.com
Tue Aug 12 14:52:22 EDT 2008


Thank you Nigel, it's clearer for both of us now.
I think wat confused her is the fact that :

L = [1,2,3]
def foo(my_list):
    my_list.append(4)

will modify L, while the following:

L = [1,2,3]
def foo(my_list):
    my_list = [1,2,3,4]

will not.

On Tue, Aug 12, 2008 at 6:46 PM, Nigel Rantor <wiggly at wiggly.org> wrote:
> Palindrom wrote:
>>
>> ### Python ###
>>
>> liste = [1,2,3]
>>
>> def foo( my_list ):
>>    my_list = []
>
> The above points the my_list reference at a different object. In this case a
> newly created list. It does not modify the liste object, it points my_list
> to a completely different object.
>
>> ### Perl ###
>>
>> @lst =(1,2,3);
>> $liste =\@lst;
>> foo($liste);
>> print "@lst\n";
>>
>> sub foo {
>>  my($my_list)=@_;
>>  @{$my_list}=()
>> }
>
> The above code *de-references* $my_list and assigns an empty list to its
> referant (@lst).
>
> The two code examples are not equivalent.
>
> An equivalent perl example would be as follows:
>
> ### Perl ###
>
> @lst =(1,2,3);
> $liste =\@lst;
> foo($liste);
> print "@lst\n";
>
> sub foo {
>  my($my_list)=@_;
>  $my_list = [];
> }
>
> The above code does just what the python code does. It assigns a newly
> created list object to the $my_list reference. Any changes to this now have
> no effect on @lst because $my_list no longer points there.
>
>  n
>



More information about the Python-list mailing list