Rieccomi dopo un po'. Proseguendo lo studio, mi sono imbattuto sulle differenze tra a=a+1 e a+=1
In poche parole, cambia solo il fatto che in a=a+1 a viene calcolata inutilmente 2 volte peggiorando le prestazioni.
Facilmente verificabile comparando i tempi.
Entrambi i modi, creano un nuovo oggetto, essendo i numeri al pari di stringhe e tuple oggetti immutabili.
Cosa tira cosa, mi sono imbattuto in un caso interessante per me neofita, sempre inerente ad a+=a o a=a+a
questa volta però riguarda oggetti mutevoli come le liste per esempio:
Supponiamo:
Codice: Seleziona tutto
l=[1,2]
m=l #ora m è uguale l, punta stessa area memoria
l=l+[3,4]
print (l,m)
output:
come si può notare, a è uguale a m, ma nella riga:
l, diventa un oggetto nuovo, quindi m non viene modificato.
Discorso opposto con:
Output:
in questo caso, non creiamo un oggetto nuovo, ma [3,4], viene aggiunto sul posto, quindi m che condivideva la
stessa area di memoria viene modificato.
Lo stesso risultato lo avremmo ottenuto con l.extend()
Sono banalità, ma penso siano importanti per un neofita, potrebbero generare bug difficili da scovare.
Penso oltretutto che siano i concetti base del python che è meglio avere ben chiari
PS: solo una curiosità: ho provato a scrivere in C alcune funzioni di "libreria" delle stringhe, per esempio maketrans().
Ora io non sono un programmatore esperto e professionista del C, ma devo dire che risulta particolarmente ostico battere le funzioni python
che saranno scritte sicuramente in C. Nel caso di maketrans, sono riuscito a eguagliare i tempi...o quasi.
Quindi deduco che siano altamente ottimizzate