2017-02-12 1 views
0

Jede Hilfe wird sehr geschätzt werden !!!Problem mit pop() und append()

res = [] 
s = [1,2,3,4,5,6] 
s.pop() 
res.append(s) 
print res 
s.pop()                     
res.append(s) 
print res 

Der obige Python-Code ergibt folgendes Ergebnis

[[1, 2, 3, 4, 5]] 
[[1, 2, 3, 4], [1, 2, 3, 4]] 

Ich verstehe nicht, warum Pop auf s res auswirken wird. Ich meine das Drucker

[[1,2,3,4,5]] 
[[1,2,3,4,5],[1,2,3,4]] 
+0

Sie * mit der * gleichen Liste arbeiten. Sie haben 's' zu' res' * zweimal * hinzugefügt, aber es ist immer noch ** dieselbe Liste ** –

+0

Bevor ich s zu res hinzufüge, öffne ich das letzte Element in s. Also sollten die beiden Gegenstände in res anders sein, oder? – n00d1es

Antwort

0

Jeder Wert in Python sein soll, ist eine Referenz (Zeiger) auf ein Objekt. Zuweisung kopiert immer den Wert (was ein Zeiger ist); zwei solcher Zeiger können somit auf das gleiche Objekt zeigen.

das benötigte Ergebnis zu erhalten, müssen Sie die erste Liste kopieren:

res = [] 
s = [1,2,3,4,5,6] 
s.pop() 
res.append(s[:]) 
print(res) 
s.pop() 
res.append(s[:]) 
print(res) 

Die gleiche list.copy()-Funktion durchgeführt werden kann:

... 
res.append(s.copy()) 
... 

Der Ausgang:

[[1, 2, 3, 4, 5]] 
[[1, 2, 3, 4, 5], [1, 2, 3, 4]] 
+0

Danke, @RomanPerekruh. Jetzt verstehe ich. – n00d1es