Sto solo iniziando alcune manipolazioni di stringhe e ho trovato questa domanda. Probabilmente stavo cercando di fare qualcosa come l'OP, "al solito me". Le risposte precedenti non hanno chiarito la mia confusione, ma dopo averci pensato un po ', alla fine ho "capito".
Finché a
, b
, c
, d
, e e
hanno lo stesso valore, riferimento nello stesso posto. La memoria è salvata Non appena la variabile inizia ad avere valori diversi, iniziano ad avere riferimenti diversi.La mia esperienza di apprendimento è venuto da questo codice:
import copy
a = 'hello'
b = str(a)
c = a[:]
d = a + ''
e = copy.copy(a)
print map(id, [ a,b,c,d,e ])
print a, b, c, d, e
e = a + 'something'
a = 'goodbye'
print map(id, [ a,b,c,d,e ])
print a, b, c, d, e
La stampa è:
[4538504992, 4538504992, 4538504992, 4538504992, 4538504992]
hello hello hello hello hello
[6113502048, 4538504992, 4538504992, 4538504992, 5570935808]
goodbye hello hello hello hello something
Per ottenere risposta diversa da di Martijin (che è del tutto corretto, anche se non necessariamente rispondere alla domanda come detto) si potrebbe vuoi fornire più dettagli/casi d'uso per mostrare ** perché ** vuoi copiarlo. – elmo
Come suggerisce @elemo, questo potrebbe essere un [problema XY] (http://www.perlmonks.org/?node=XY+Problem). – martineau
Ero interessato a stimare l'utilizzo della memoria di un dizionario annidato del modulo 'd ['hello'] = e', dove' e ['hi'] = 'again''. Per generare un dizionario nidificato, ho generato un singolo dizionario 'e' e l'ho copiato più volte. Ho notato che il consumo di memoria era molto basso, il che ha portato alla mia domanda qui. Ora capisco che non sono state create copie di stringa, quindi il basso consumo di memoria. –