Identificazione dell'oggetto in Python

3

Nell'apprendimento di Python, ho scoperto che quando due "nomi" (o "variabili") sono assegnati allo stesso valore, entrambi puntano allo stesso indirizzo di memoria. Ad esempio

>>> a = 10
>>> b = 10
>>> a is b
True

La mia domanda è, quando assegni b , in che modo Python capisce che esiste già un oggetto 10 ?

Un modo potrebbe essere creare il nuovo oggetto per b , scansionare oggetti preesistenti in memoria per trovare un duplicato e, se trovato, puntare b su di esso. Sembra costoso e difficile per oggetti più complessi.

    
posta wsaleem 23.06.2014 - 22:20
fonte

2 risposte

2

Mantiene solo una cache di piccole istanze di interi.

>>> a = 58435
>>> b = 58435
>>> a is b
False

Precisamente quanto piccolo è facile da determinare manualmente per la tua implementazione. Mine cache da -5 a 256.

    
risposta data 23.06.2014 - 22:26
fonte
0
L'operatore

is non è uguale a == .

Mentre == controlla il valore dell'oggetto, is controlla l'identità di esso usando il suo indirizzo di memoria.

Come accennato prima gli ints da -5 a 256 (inclusi) sono speciali (piccoli) e Python non ricreare quegli oggetti. Gli ints dall'esterno di quell'intervallo saranno sempre nuovi oggetti in modo che is restituirà True solo se sono lo stesso oggetto esatto.

Questo succede anche a: char, stringhe vuote e altre stringhe - che assomigliano a identificatori Python.

(Penso che anche i byte, ma non sono sicuro).

Se vuoi saperne di più, dai un'occhiata al post che cade: link

    
risposta data 23.06.2014 - 22:41
fonte

Leggi altre domande sui tag