[Python] It's 1999 all over again

Daniele Varrazzo piro a develer.com
Gio 13 Feb 2014 16:07:59 CET


On 2014-02-13 13:01, Carlos Catucci wrote:

> 1. Il tipo *string* si comporta come un *array di byte*, una volta 
> settati
> sono immutabili. Cioè è illegale assegnare un valore a *&s[i]*.
>
> A me sembra una cosa complicata, in C posso cambiare un carattere di 
> un
> array di caratteri (una stringa in pratica), e qui mi sembra sia 
> vietato.

In C non esistono stringe. Quello che tu credi di fare ad una stringa 
lo stai facendo ad un array di caratteri. Considerare una stringa un 
array di cose comporta una serie di svantaggi, a cui forse siamo 
abituati, ma svantaggi restano:

- sei legato all'implementazione del carattere (char, utf16, utf32)
- un tipo mutabile non può essere hashato (per rispondere alla tua 
domanda nell'altra mail)

Ha anche il vantaggio di poter accedere con efficienza o(1) al 
carattere N. Questo vantaggio è largamente sopravvalutato (anche da me, 
per molto tempo: c'ho avuto le migliori discussioni con un amico). 
Quanti casi di uso richiedono di accedere al carattere 100 di una 
stringa? Soprattutto quando potresti non sapere se quella stringa è di 
byte in encoding utf8, quindi il byte 100 potrebbe non rappresentare 
neanche un carattere?

"un array di caratteri (una stringa in pratica)" è un'abitudine dura a 
morire, ma dalla sua morte si può guadagnare parecchia igiene mentale.

-- Daniele



Maggiori informazioni sulla lista Python