In Python ho creato interi e elencato gli oggetti come segue:
a = 10
b = 10
x = []
y = []
Quindi ottengo i seguenti risultati durante il confronto con l'id di a
e b
e l'ID di x
e y
id(a)==id(b) returns True
id(x)==id(y) returns False
Da qualche parte ho letto che l'assegnazione in Python non copia mai i dati. La mia domanda è perché x e y non hanno lo stesso id?
risposte:
1 per risposta № 1Devi sapere che gli interi python sono memorizzati nella cache e immutabili, ciò significa che entrambi a
e b
stanno etichettando lo stesso 10
. Le liste sono oggetti e sono allocate separatamente, ecco perché i loro id sono diversi dall'inizio
1 per risposta № 2
Le liste sono modificabili, se si utilizza lo stesso oggetto, quando si aggiunge un elemento a una delle liste, si vedrà anche il resto sull'altro.
L'identità degli interi dipende dall'implementazione e di solito è valida solo per i numeri piccoli; buona lettura Qui.
A proposito, ==
è l'operatore di uguaglianza. Un modo più breve (e più pulito) per id(a)==id(b)
è usare l'operatore di identità is
. Nel tuo caso: a is b
.
0 per risposta № 3
x = []
è una scorciatoia per istanziare una nuova lista, che significa un nuovo oggetto con un nuovo ID oggetto. Nonostante x
e y
sono assegnati come liste vuote, sono semplicemente riferimenti a posizioni di memoria allocate per le rispettive liste. Se id(x) == id(y)
poi x
e y
condividerebbe lo stesso ID oggetto, il che significherebbe in realtà che condividono un percorso di memoria o sono riferimenti allo stesso oggetto (quindi eventuali modifiche apportate a uno si applicherebbero all'altro).
D'altro canto, id(a) == id(b)
perché sono entrambi numeri interi, che sono tipi di dati primitivi.