2013-10-13 9 views
5
array1=[0,1,2] 
array2=array1 
array2[0]=234234 
print array1 

USCITA:Impostazione due array uguali

[234234, 1, 2] 

Perché il cambiamento python 'array1'? Non dovrebbe semplicemente cambiare array2? Come posso impedire a python di cambiare array1 quando cambio array2?

+3

Benvenuti in StackOverflow. Non preoccuparti troppo dei downvoters: alcune persone pensano che ogni domanda duplicata o principiante debba essere downvoted. Ma oltre ad essere un duplicato questa è una bella domanda: è chiaro quale sia la domanda e mostra un codice conciso che dimostra chiaramente il problema. – kojiro

risposta

4

Usa fetta notazione per copiare come questo

array2 = array1[:] 

oppure è possibile utilizzare list funzione

array2 = list(array1) 

Quando si assegna una lista ad un'altra lista, non verrà creato un nuovo elenco ma sia la le variabili saranno fatte per riferirsi alla stessa lista. Questo può essere confermato con questo programma.

array1 = [1, 2, 3, 4] 
array2 = array1 
print id(array1), id(array2) 

Entrambi stamperanno lo stesso id. Ciò significa che sono entrambi uguali (se si è di sottotitolo C, è possibile considerarli come puntatori (nell'implementazione di CPython sono davvero dei puntatori, altre implementazioni scelgono di stampare id univoci - Si prega di controllare il commento di kojiro)). Maggiori informazioni su idhere. Quando lo fai

array3 = array1[:] 
array4 = list(array1) 
print id(array1), id(array3), id(array4) 

otterrai diversi ID, perché in questi casi verranno creati nuovi elenchi.

+0

+1 FWIW, che 'id's sono come i puntatori è un dettaglio di implementazione specifico per CPython. Se l'interprete Python è diverso potrebbero non esserlo. Ma sarebbe comunque garantito che abbiano lo stesso valore in questo caso, anche se quel valore non è l'indirizzo di memoria della lista. – kojiro

+0

grazie mille ti ho dato la vita. anche tu eri la persona che mi ha downvoted perché se così io prenderò definitivamente in considerazione ritraendo la dichiarazione precedente. – user2875270

+0

@ user2875270 No. Non ho fatto downvote :) Questa è una domanda per principianti che tutti abbiamo avuto. Quindi, ho appena indicato che la domanda è già stata risolta in un'altra discussione. – thefourtheye

2

array1 e array2 sono due nomi per lo stesso elenco, poiché è così che vengono impostati. Se non si desidera che questo, copiare l'elenco utilizzando uno dei seguenti metodi:

array2 = array1[:] 
array2 = list(array1) 
10

array1 e array2 sono lo stesso oggetto. Ecco perché cambiando l'uno cambia l'altro. Se si vuole copia l'oggetto, ecco un modo per farlo:

array2 = array1[:] 

Vedi more on this here.