Secondo questo visualizzatore di codice Python , le stringhe Python sono allocate nello stack e non nell'heap.
Perchè è questo? Ho pensato che sarebbero stati simili a Java, dove le stringhe sono allocate nell'heap.
Secondo questo visualizzatore di codice Python , le stringhe Python sono allocate nello stack e non nell'heap.
Perchè è questo? Ho pensato che sarebbero stati simili a Java, dove le stringhe sono allocate nell'heap.
Risposte:
Quel visualizzatore non mostra i dati delle stringhe nello stack. Sta mostrando i riferimenti locali ai dati dell'heap come parte dello stack di chiamate. Questo è molto simile a Java dove i String
riferimenti sono variabili locali che puntano a String
oggetti reali sull'heap.
Il visualizzatore è libero di semplificare qualsiasi tipo di rappresentazione a cui tiene. Ciò non implica che "le stringhe Python sono allocate nello stack" in qualsiasi data implementazione di Python.
Greg ha detto nella sua risposta che le stringhe sono allocate nell'heap.
Il visualizzatore ha scelto di visualizzare alcuni oggetti nella parte "frame", il che mi sembra sbagliato. Fortunatamente, ha poco impatto per qualcuno che impara il pitone, poiché gli oggetti interessati (int, stringa) sono immutabili. Quindi è ancora possibile ragionare sugli effetti.
Tuttavia, dà la falsa impressione che le stringhe siano duplicate nella memoria quando fai cose come:
x = "hello"
y = x