Über die Kopie der mehrdimensionalen Liste von Python ist das Verhalten für mich schwer zu verstehen, deshalb habe ich es mit den experimentellen Ergebnissen organisiert. Zusammenfassend sind "copy ()", "list [:]" und "copy.copy ()" in der Kopierbibliothek flache Kopien, die eine neue mehrdimensionale Liste und dann das Original erstellen. Fügen Sie einen Verweis auf die Liste in der Liste ein. Die Kopierbibliothek "copy.deepcopy ()" ist eine tiefe Kopie, die eine neue mehrdimensionale Liste erstellt und dann eine Kopie der Liste in die ursprüngliche Liste einfügt.
copy()
Ich bin mir nicht sicher, ob die "erste Schicht" besser oder die "erste Dimension" besser ist ... Die ID ist natürlich unterschiedlich, da die Kopie eine weitere mehrdimensionale Liste erstellt. Da es sich bei dem Inhalt der Liste jedoch um Verweise handelt, wirkt sich das Umschreiben der ersten Ebene der Kopie nicht auf die ursprüngliche Liste aus. Das Umschreiben der zweiten und nachfolgenden Ebenen wird jedoch auf das Original übertragen, obwohl die ID unterschiedlich ist.
copy()
lst = [[0]*3 for _ in range(3)]
lst1 = lst.copy()
lst1[1] = ['r'] * 3
print('lst1 = ', lst1)
print('id(lst1) = %d' % id(lst1))
print('lst = ', lst)
print('id(lst) = %d' % id(lst))
lst1[0][1] = 'r'
print('lst1 = ', lst1)
print('id(lst1) = %d' % id(lst1))
print('lst = ', lst)
print('id(lst) = %d' % id(lst))
Ausgabe
lst1 = [[0, 0, 0], ['r', 'r', 'r'], [0, 0, 0]]
id(lst1) = 139730947400512
lst = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
id(lst) = 139730946890944
lst1 = [[0, 'r', 0], ['r', 'r', 'r'], [0, 0, 0]]
id(lst1) = 139730947400512
lst = [[0, 'r', 0], [0, 0, 0], [0, 0, 0]]
id(lst) = 139730946890944
List [:]
Gleich wie "copy ()".
python:aufführen[:]
lst = [[0]*3 for _ in range(3)]
lst1 = lst[:]
lst1[1] = ['r'] * 3
print('lst1 = ', lst1)
print('id(lst1) = %d' % id(lst1))
print('lst = ', lst)
print('id(lst) = %d' % id(lst))
lst1[0][1] = 'r'
print('lst1 = ', lst1)
print('id(lst1) = %d' % id(lst1))
print('lst = ', lst)
print('id(lst) = %d' % id(lst))
Ausgabe
lst1 = [[0, 0, 0], ['r', 'r', 'r'], [0, 0, 0]]
id(lst1) = 140313735131456
lst = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
id(lst) = 140313734622336
lst1 = [[0, 'r', 0], ['r', 'r', 'r'], [0, 0, 0]]
id(lst1) = 140313735131456
lst = [[0, 'r', 0], [0, 0, 0], [0, 0, 0]]
id(lst) = 140313734622336
copy.copy ()
Gleich wie "copy ()".
copy.copy()
import copy
lst = [[0]*3 for _ in range(3)]
lst1 = copy.copy(lst)
lst1[1] = ['r'] * 3
print('lst1 = ', lst1)
print('id(lst1) = %d' % id(lst1))
print('lst = ', lst)
print('id(lst) = %d' % id(lst))
lst1[0][1] = 'r'
print('lst1 = ', lst1)
print('id(lst1) = %d' % id(lst1))
print('lst = ', lst)
print('id(lst) = %d' % id(lst))
Ausgabe
lst1 = [[0, 0, 0], ['r', 'r', 'r'], [0, 0, 0]]
id(lst1) = 139783910001664
lst = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
id(lst) = 139783910057280
lst1 = [[0, 'r', 0], ['r', 'r', 'r'], [0, 0, 0]]
id(lst1) = 139783910001664
lst = [[0, 'r', 0], [0, 0, 0], [0, 0, 0]]
id(lst) = 139783910057280
copy.deepcopy ()
Da durch das Kopieren eine weitere mehrdimensionale Liste erstellt wird, ist die ID unterschiedlich und der Inhalt dieser Liste wird ebenfalls kopiert. Sozusagen wird ein Klon erstellt. Der Inhalt ist genau der gleiche, aber unterschiedlich, sodass das Umschreiben keine Auswirkungen auf das Original hat.
copy.deepcopy()
import copy
lst = [[0]*3 for _ in range(3)]
lst1 = copy.deepcopy(lst)
lst1[1] = ['r'] * 3
print('lst1 = ', lst1)
print('id(lst1) = %d' % id(lst1))
print('lst = ', lst)
print('id(lst) = %d' % id(lst))
lst1[0][1] = 'r'
print('lst1 = ', lst1)
print('id(lst1) = %d' % id(lst1))
print('lst = ', lst)
print('id(lst) = %d' % id(lst))
Ausgabe
lst1 = [[0, 0, 0], ['r', 'r', 'r'], [0, 0, 0]]
id(lst1) = 139629482679488
lst = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
id(lst) = 139629482735040
lst1 = [[0, 'r', 0], ['r', 'r', 'r'], [0, 0, 0]]
id(lst1) = 139629482679488
lst = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
id(lst) = 139629482735040
Python - Doppelte Liste Kopieren --- flache und tiefe Kopiervorgänge [Python] So verhindern Sie, dass die ursprüngliche Liste geändert wird, indem Sie dem Argument einer von Ihnen erstellten Funktion eine Liste zuweisen
Recommended Posts