ist jemanden schon mal das hier aufgefallen?
Code: Alles auswählen
B = [[0]*2]*2
A = [[0,0],[0,0]]
print A==B
A[0][1] = 1
B[0][1] = 1
print A==B
Schöne Grüße
Sebastian
Code: Alles auswählen
B = [[0]*2]*2
A = [[0,0],[0,0]]
print A==B
A[0][1] = 1
B[0][1] = 1
print A==B
Code: Alles auswählen
In [6]: A
Out[6]: [[0, 1], [0, 0]]
In [7]: B
Out[7]: [[0, 1], [0, 1]]
Code: Alles auswählen
+---+
.->| --------.
+----+ | +---+ | +---+
A = | ----' | -------.| .->| --------.
+----+ +---+ vv +----+ || +---+ |
| ----. 0 B = | ----'| | -------.|
+----+ | +---+ ^^ +----+ | +---+ vv
`->| -------'| | -----' 0
+---+ | +----+
| --------'
+---+
Code: Alles auswählen
[[0] * 2 for i in range(2)]
Immutable genausowenig.str1442 hat geschrieben:veränderliche (mutable) Objekte niemals eine Kopie erstellen (wenn nicht explizit angefordert)
Das "nur" stimmt nicht ganz. Über dictionarys kann man auch etwas ähnliches erreichen, das sogar hinsichtlich der Notation beim Zugriff auf einzelne Elemente noch stärker an zweidimensionale Arrays erinnert, wie man sie aus diversen anderen Programmiersprachen kennt:sma hat geschrieben:Eine Möglichkeit, kompakt ein "zweidimensionales Array" (das es in Python gar nicht gibt, sondern nur mit einer Liste von Listen simuliert werden kann) ...
Code: Alles auswählen
In [15]: zelle = dict(zip([(x,y) for x in xrange(3) for y in xrange(4)],[0]*12))
In [16]: zelle[2,1] = 5
In [17]: zelle[1,2]
Out[17]: 0
Code: Alles auswählen
>>> zelle = {(x,y):0 for x in range(3) for y in range(4)}
>>> zelle[2,1] = 5
>>> zelle[1,2]
0
Zugegeben. Streiche "nur". Die Zugriffszeiten ist aber in der Regel schlechter. Wenn, dann würde ich vorschlagen, eine eigene Klassen mit passend überschriebenen __getitem__ und __setitem__ zu bauen, die das Koordinaten-Tupel serialisiert.numerix hat geschrieben:Das "nur" stimmt nicht ganz.
Das kann gut sein. Ich habe es selbst auch noch nie so gemacht (außer zu Experimentierzwecken) und - soweit ich mich erinnern kann - auch noch nie so in "echtem" Code gesehen.sma hat geschrieben:Zugegeben. Streiche "nur". Die Zugriffszeiten ist aber in der Regel schlechter.numerix hat geschrieben:Das "nur" stimmt nicht ganz.
Code: Alles auswählen
zs = dict.fromkeys(((x, y) for x in xrange(3) for y in xrange(4)), 0)
zs = dict((p, 0) for p in ((x, y) for x in xrange(3) for y in xrange(4)))
Code: Alles auswählen
tstep = 10
arrayT = [[0]*8]*tstep
for ic in range(0,tstep):
arrayT[ic][0] = float(ic)
print arrayT[ic][0]
print arrayT