Ich bin süchtig danach, also mach dir eine Notiz.
Wenn Sie eine Liste einer anderen Variablen in Python zuweisen, wird diese als Referenz übergeben.
x = [1, 2, 3]
y = x
y[0] = 999
x #Die Änderung von y wirkte sich auch auf x aus.
>>> [999, 2, 3]
Um dies zu vermeiden (= Wert übergeben), verwenden Sie copy.
from copy import copy
x = [1, 2, 3]
y = copy(x) # x[:]Aber gut(Vielmehr ist dieser einfacher)
y[0] = 999
x #Die Änderung in y hatte keine Auswirkungen
>>> [1, 2, 3]
Wurde die Kopie also vollständig erstellt? Beispielsweise werden verschachtelte Listen als Referenz übergeben.
from copy import copy
x = [[1, 2, 3], 4, 5]
y = copy(x)
y[0][0] = 999
x #Obwohl es eine Kopie ist!
>>> [[999, 2, 3], 4, 5]
Wenn Sie also alles, einschließlich Verschachtelung usw., vollständig kopieren möchten, verwenden Sie deepcopy.
from copy import deepcopy
x = [[1, 2, 3], 4, 5]
y = deepcopy(x)
y[0][0] = 999
x
>>> [[1, 2, 3], 4, 5]
Als ich es ausprobiert habe, scheint es automatisch entschieden zu werden, ob eine flache oder eine tiefe Kopie ausgeführt werden soll. Die folgenden zwei unterscheiden sich darin, ob die zweite Liste in x 6 enthält oder nicht ** nur **.
import numpy as np
x = [[1, 2, 3], [4, 5]]
y = np.copy(x)
y[0][0] = 999
x
>>> [[999, 2, 3], [4, 5, 6]]
import numpy as np
x = [[1, 2, 3], [4, 5, 6]]
y = np.copy(x)
y[0][0] = 999
x
>>> [[1, 2, 3], [4, 5, 6]]
Anscheinend wird eine tiefe Kopie für etwas durchgeführt, das in ein n-dimensionales Array umgewandelt werden kann. Ich denke, es ist nur eine einfache Idee, solange die Matrix durch die verschachtelte Liste dargestellt wird. Gleiches gilt übrigens auch für 3D.
import numpy as np
x = [[[1, 0], [2, 0], [3]],
[[4, 0], [5, 0], [6, 0]]]
y = np.copy(x)
y[0][0][0] = 999
x
>>> [[[999, 0], [2, 0], [3]], [[4, 0], [5, 0], [6, 0]]]
import numpy as np
x = [[[1, 0], [2, 0], [3, 0]],
[[4, 0], [5, 0], [6, 0]]]
y = np.copy(x)
y[0][0][0] = 999
x
>>> [[[1, 0], [2, 0], [3, 0]], [[4, 0], [5, 0], [6, 0]]]
** Deepcopy am stärksten! !! !! !! !! ** ** **
(Vorerst) Offiziell gibt es zwei Probleme mit Deep Copy-Vorgängen.
Es tut jedoch nicht weh, eine leicht redundante Kopie für den persönlichen Umgang zu haben. Rekursive Verarbeitung wird nicht so oft benötigt, und Deepcopying kann in Situationen, in denen Sie süchtig danach sind, eine gute Wahl sein.