2017-06-18 10 views
-1

Ich lerne über Objekte und Referenzen in einem Anfänger Programmierkurs, die ich in der Schule nehme, und ich bin ein wenig verwirrt darüber, was ein "Objekt" ausmacht. Insbesondere bin ich nicht sicher, wie man bestimmt, wie viele Objekte in einer Liste von Listen sind.Wie viele verschiedene Objekte sind in einer Liste von Listen?

Wie viele verschiedene Listenobjekte mit dem Wert [1, 2] gibt es nach Ausführung des Folgenden?

lst1 = [1, 2] 
lst2 = [[1, 2], list(lst1), lst1] 
lst3 = list(lst2) 
lst3.append([1, 2]) 
lst4 = [] 

for lst in lst3: 
    lst4.append(list(lst)) 

Vielen Dank für jede Hilfe/Klarstellung.

+1

Das sieht nach Hausaufgaben aus ... Was hast du probiert? Was ist deine eigene Idee? Warum? –

Antwort

0

Die Anzahl der verschiedenen Listen [1,2] ist . Wir können dies berechnen, indem über die Programmzeile-per-line gehen:

lst1 = [1, 2] # we create our first [1,2] 

Als nächstes werden wir eine Liste von Listen, konstruieren wie:

lst2 = [[1, 2], list(lst1), lst1] 
#  ^ ^

Hier haben wir zwei zusätzliche [1,2] Listen erstellt (bezeichnet mit den Carets ^). Die erste durch eine andere [1,2] Liste literal, und die zweite durch den Aufruf list(lst1). Der Konstruktor erstellt eine seichte Kopie der Liste, also eine neue Liste [1,2].

Als nächstes machen wir eine flache Kopie lst2:

lst3 = list(lst2) 

Hier machen wir keine neuen [1,2] Listen: Wir haben eine neue Liste mit drei Elementen erstellen, aber diese beziehen sich alle auf die gleichen Listen als lst2.

lst3.append([1,2]) 
#   ^

Als nächstes fügen wir eine neue[1,2] zum lst3. Das bringt also die Gesamtmenge von deutlich[1,2] s zu vier.

Als nächstes werden wir über die lst3 iterieren und eine flache Kopie von jedes Element in lst3 machen. Da lst3 vier verschiedene [1,2] Objekte hat, so werden wir weitere vier [1,2] Objekte vorstellen:

lst4 = [] 

for lst in lst3: 
    lst4.append(list(lst)) 
    #   ^

So erhalten wir insgesamt:

Expression | Count 
-----------+------ 
lst1 = ... |  1 
lst2 = ... |  2 
lst3 = ... |  0 
lst3.appe. |  1 
for ... |  4 
-----------+------ 
TOTAL   8 

Speicherlayout:

nach den Operationen Der Speicher sieht wie folgt aus:

lst1 -------------+------------+-> [1,2] 
        |   | 
     +---+---+-|-+   | 
lst2 -> | o | o | o |   | 
     +-|-+-|-+---+   | 
      | \--------> [1,2] | 
      +-> [1,2] ^ | 
      | /----------/  | 
      | | /------------/ 
     +-|-+-|-+-|-+---+ 
lst3 -> | o | o | o | o---> [1,2] 
     +---+---+---+---+ 
      /-> [1,2] 
      |  /-> [1,2] 
     +-|-+---+-|-+---+ 
lst4 -> | o | o | o | o---> [1,2] 
     +---+-|-+---+---+ 
       \-> [1,2] 
+0

'^' ist ein * caret *, die Karotte ist ein spitzes Orangenwurzelgemüse – jonrsharpe

+0

Nur neugierig, was hast du benutzt, um die ordentliche Darstellung des Speicherlayouts zu erzeugen? – stybl

+0

@jonrsharpe: müde werden :) danke für die Entdeckung. –

Verwandte Themen