Ich verwende eine 3D-Liste von Objekten in Python, um einen Datensatz zu organisieren, den ich habe. Ich bemerke, dass meine Objektelemente nicht ganz eindeutig sind, d. H. Variablen in einem Objekt des Arrays werden in anderen aktualisiert. Ein minimales funktionierendes Beispiel, das mein Problem veranschaulicht, wird unten gezeigt.Python2.7: Stellen Sie sicher, dass die 3D-Liste der Objekte eindeutig ist
Der Python-Code, der diese Klassendefinition verwendet, geht ungefähr so.
import random
ObjectArray = [[[myClass() for k in range(4)] for j in range(3)] for i in range(2)]
#Print addresses of object array
print("Addresses of the individual object elements in the 3D list ")
for i in range(0,2):
for j in range(0,3):
for k in range(0,4):
print(ObjectArray[i][j][k])
#Loop over object array and fill each object with some data
for i in range(0,2):
for j in range(0,3):
for k in range(0,4):
NumData = int(10*random.random())
for m in range(0,NumData):
#Generate some junk data to insert into the list of this object
ListAData = int(10*random.random())
ListBData = int(10*random.random())
ObjectArray[i][j][k].check_data()
ObjectArray[i][j][k].add_data(ListAData,ListBData)
ObjectArray[i][j][k].check_data()
Was habe ich verpasst? Ist es möglich, 3D-Listen von Objekten in Python 2.7 zu verwenden? Jedes Objekt in der Liste scheint eine eindeutige Speicheradresse zu haben, wenn ich es ausdrucke. Jede Einsicht würde sehr geschätzt werden.
Eine Probe der Ausgabe von diesem Code ist:
Addresses of the individual object elements in the 3D list
<__main__.myClass instance at 0x7fc59ad4ef80> <__main__.myClass
instance at 0x7fc59ad635a8> <__main__.myClass instance at
0x7fc59ad63248> <__main__.myClass instance at 0x7fc59ad63440>
<__main__.myClass instance at 0x7fc59ad6d320> <__main__.myClass
instance at 0x7fc59ad6d368> <__main__.myClass instance at
0x7fc59ad6d3b0> <__main__.myClass instance at 0x7fc59ad6d3f8>
<__main__.myClass instance at 0x7fc59ad6d488> <__main__.myClass
instance at 0x7fc59ad6d4d0> <__main__.myClass instance at
0x7fc59ad6d518> <__main__.myClass instance at 0x7fc59ad6d560>
<__main__.myClass instance at 0x7fc59ad6d638> <__main__.myClass
instance at 0x7fc59ad6d680> <__main__.myClass instance at
0x7fc59ad6d6c8> <__main__.myClass instance at 0x7fc59ad6d710>
<__main__.myClass instance at 0x7fc59ad6d7a0> <__main__.myClass
instance at 0x7fc59ad6d7e8> <__main__.myClass instance at
0x7fc59ad6d830> <__main__.myClass instance at 0x7fc59ad6d878>
<__main__.myClass instance at 0x7fc59ad6d908> <__main__.myClass
instance at 0x7fc59ad6d950> <__main__.myClass instance at
0x7fc59ad6d998> <__main__.myClass instance at 0x7fc59ad6d9e0>
Error: Unaccounted for Data in Object! Object has 4 elements. Thinks it has 0
Error: Unaccounted for Data in Object! Object has 5 elements. Thinks it has 1
Error: Unaccounted for Data in Object! Object has 5 elements. Thinks it has 1
Error: Unaccounted for Data in Object! Object has 6 elements. Thinks it has 2
Error: Unaccounted for Data in Object! Object has 6 elements. Thinks it has 2
Error: Unaccounted for Data in Object! Object has 7 elements. Thinks it has 3
Error: Unaccounted for Data in Object! Object has 7 elements. Thinks it has 3
Sie sind eindeutige Instanzen von MyClass, aber wenn Sie die Print (ID (ObjectArray [i ] [j] [k] .ListA)) 'Sie sollten sehen, sie haben alle die gleiche Liste .... Suche nach" veränderbare Standardargumente in Python " –