2013-11-01 7 views
5

mi è capitato su questo comportamento peculiare accidentalmente:Perché list (my_list) modifica l'oggetto?

>>> a = [] 
>>> a[:] = ['potato', a] 
>>> print a 
['potato', [...]] 
>>> print list(a) 
['potato', ['potato', [...]]] 

Con quale meccanismo si fa chiamare list(a) srotolare un livello di ricorsione nella rappresentazione di stringa di se stessa?

risposta

2

list() fa una copia superficiale. La lista esterna non è più lo stesso oggetto della lista che contiene. È stampato come ci si aspetterebbe.

5

Il ... viene visualizzato solo quando un elemento contiene se stesso, ovvero lo stesso oggetto. list(a) crea una copia dell'elenco, quindi lo a interno non è lo stesso oggetto. Mostra solo lo ... quando arriva a "a dentro a", non "a dentro list(a)".

Problemi correlati