[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