Come vengono gestite le variabili e la memoria in Python.
Automagicamente! No, davvero, devi solo creare un oggetto e la macchina virtuale Python gestisce la memoria necessaria e dove deve essere collocata nel layout della memoria.
Ha uno stack e un heap e quale algoritmo viene utilizzato per gestire la memoria?
Quando ne parliamo CPython
utilizza un heap privato per la memorizzazione di oggetti. Dalla documentazione dell'API C CPython :
La gestione della memoria in Python implica un heap privato contenente tutti gli oggetti e le strutture dati Python. La gestione di questo heap privato è assicurata internamente dal gestore della memoria Python. Il gestore della memoria Python ha diversi componenti che si occupano di vari aspetti della gestione dinamica dell'archiviazione, come condivisione, segmentazione, preallocazione o memorizzazione nella cache.
Il recupero della memoria viene gestito principalmente dal conteggio dei riferimenti . Cioè, la VM Python mantiene un journal interno di quanti riferimenti si riferiscono a un oggetto e lo raccoglie automaticamente quando non ci sono più riferimenti che fanno riferimento ad esso. Inoltre, esiste un meccanismo per rompere i riferimenti circolari (che il conteggio dei riferimenti non è in grado di gestire) rilevando "isole" di oggetti non raggiungibili, in qualche modo al contrario dei tradizionali algoritmi GC che cercano di trovare tutti gli oggetti raggiungibili.
NOTA: tieni presente che queste informazioni sonoCPython
specifiche. Altre implementazioni pitone, qualipypy
,iron python
,jython
e altri possono differire tra loro e da CPython quando si tratta di loro specifiche di implementazione. Per capirlo meglio, può aiutare a capire che c'è una differenza tra Python la semantica (il linguaggio) e l'implementazione sottostante
Data questa conoscenza, ci sono raccomandazioni sulla gestione della memoria per il crunch di grandi numeri / dati?
Ora non posso parlare di questo, ma sono sicuro che NumPy (la libreria Python più popolare per lo scricchiolio dei numeri) ha meccanismi che gestiscono il consumo di memoria con grazia.
Se desideri saperne di più sugli interni di Python, dai un'occhiata a queste risorse: