More random python observations from a perl programmer

Neil Schemenauer nascheme at ucalgary.ca
Sat Aug 21 20:50:26 CEST 1999


I think you misunderstand the intention of my post.  I am not
trying to defend Python on point.  Python is not perfect.  I am
trying to give some information of why things are the way they
are and am trying to help a new user of the language understand
it.

Is it really productive to keep repeating that length one tuples
in Python are weird?

Tom Christiansen <tchrist at mox.perl.com> wrote:
>In comp.lang.python, 
>    nascheme at ucalgary.ca (Neil Schemenauer) writes:
>:It is not too hard to remember what is mutable and what is not.
>
>I'm not sure that this maps well to the way people think, considering
>that everyone keeps telling me that it's "just something you have to
>learn and/or get used to", which means it's not intuitive at first.
>And that was my point of listing it as a gotcha.

I don't deny that this is a gotcha.

> Why can python copy sequences of chars (1-byte strings)
>trivially:
>
>    s = "this stuff"
>    t = s
>
>But as soon as you have a sequence of, oh, integers for example, you
>can't use the same set-up.  Very odd.

You are still confused.  Python does not copy anything
implicitly.  Read my other post about this.  Maybe the id()
function will help:

    >>> a = 'hello'
    >>> id(a)
    135476992
    >>> b = a
    >>> id(b)
    135476992
    >>>

[on perl copying objects]
>Yes, with 1st-class arrays (you say lists) and hashes (you say
>dictoinaries).  But not with instances, which are always by definition
>references, and suffer the same confusion.  That's why base types
>are easier to use for many "accidental programmers".

What happends when you have a large array and pass it to a
function?  This seems pretty inefficient.  If the array is not
copied then why are they so many rules about when something is
copied and when it is not.

>:>    Slices in Python must be contiguous ranges of a sequence.
>:>    In Perl, there's no such restriction.  
>:Use a dictionary if you want this.
>
>Huh?  How would I use a dictionary

Sorry, I didn't read you problem close enough.

[on del as a statement]
>I *really* don't undertsand this. Why does Python have so many
>"statements" compared with C or Perl?  What does this actually buy you?
>I can remove variable bindings just fine with the undef() or delete()
>functions in Perl, without needing to sacrifice an entire *statement*
>in the grammar for this!  There must be something important that I'm
>not understanding here, and I'd like to.

That undef() must be an interesting function to be able to modify
the binding of its caller.  You don't see a conceptual problem
with this?  Can user written functions do this too?


    Neil




More information about the Python-list mailing list