2017-06-25 1 views
-1

zu Modifizieren Bitte werfen Sie einen Blick auf dem folgenden Code:Wie neu zuweisen (oder modifizieren), um einen Python-Variable mit einer anderen Variable definiert, ohne beide

import numpy as np 
list1 = [1,2,3] 
list2 = list1 
list2.append(4) 
print list2 
print list1 

Das Ergebnis ist [1,2,3,4] für beide Drucke. Ich erwartete [1,2,3,4] für list2 und [1,2,3] für list1, da ich nur '4' an list2 angehängt habe. Es sieht so aus, als ob die Zuweisung list2 = list1 die Anweisung in list2 an list1 übergeben hat.

Zuerst möchte ich verstehen, warum das ist und zweitens, gibt es eine Möglichkeit, eine Variable B, die identisch ist mit der Variablen A, aber so dass jede Anweisung auf B (eine Neuzuweisung zum Beispiel) zu machen, wird B ändern, aber nicht A?

Offensichtlich konnte ich

list1 = [1,2,3] 
list2 = [1,2,3] 
list2.append(4) 

tun und bekommen, was ich will. Aber was, wenn list1 heißt, ein (numpy) 100x100 Array? Dann hätte ich lieber eine Möglichkeit, um list1 in eine andere Variable zu kopieren, als sie manuell neu zu schreiben.

Ich bin kein erfahrener Programmierer und bin ziemlich neu in Python. Ich habe auch versucht, diese Frage so einfach wie möglich zu formulieren und habe nichts gefunden, was direkt auf dieser Seite beantwortet wurde. Bitte leite mich zu allem, was ich vermisst habe, und akzeptiere meine Entschuldigung im Voraus. Vielen Dank!

+0

Beachten Sie, dass Sie einfache Python-Listen präsentieren, aber sprechen Sie über numpy. Verschiedene Bestien: https://stackoverflow.com/questions/3059395/numpy-array-assignment-problem –

+1

Sie haben Ihre eigene Frage beantwortet. In Python kopiert die Zuweisung * niemals *. Wenn Sie eine Kopie möchten, müssen Sie explizit eine Kopie erstellen *. 'numpy' Arrays stellen eine' .copy' Methode zur Verfügung, die Sie verwenden können. Sie sollten sich wahrscheinlich Ned Batchelders [Fakten und Mythen über Python-Namen und Werte] (https://nedbatchelder.com/text/names.html) ansehen. –

+0

Danke, sehr nützliche Informationen! – orion2112

Antwort

0

Dies wird funktionieren.

list1 = [1,2,3] 
list2 = list1[:] 

Nun list2.append(4) ---> nicht list1 beeinflussen.

Der erste Versuch besteht darin, nur die Referenzen zu kopieren, so dass sich list1 und list2 auf die gleiche Variable beziehen.

+0

Aber Vorsicht, das '[;]' erstellt keine Kopie eines numpy 'array'. – hpaulj

Verwandte Themen