Kopie einer Liste erstellen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
-dude-
User
Beiträge: 16
Registriert: Samstag 25. Februar 2012, 09:43

Hallo zusammen,

ich habe folgende Situation: Es gibt eine Klasse K mit

Code: Alles auswählen

class K():
    def __init__(self):
        self.__liste = [1,2,3,4]

    def getListe(self):
        return self.__liste
und ich möchte nun folgendes tun:

Code: Alles auswählen

k = K
meineListe = k.getListe()
meineListe.insert(0,0)
Leider hab ich das Problem, dass nun

Code: Alles auswählen

 k.getListe 
[0,1,2,3,4] ergibt. Ich möchte aber den Inhalt nur lokal und nicht in k ändern. Wie kann ich das machen?

Danke schonmal
BlackJack

@-dude-: Die `list()`-Funktion nimmt ein beliebiges iterierbares Objekt, also auch Listen, und erstellt eine Liste mit allen Elementen in dem übergebenen Objekt. Achtung: Das ist eine flache Kopie! Man bekommt eine neue Liste, aber darin sind die Objekte aus dem ursprünglichen iterierbaren Objekt.

Zur Namensgebung: Doppelte führende Unterstriche sind zur Vermeidung von Namenskollisionen bei Mehrfachvererbung gedacht. Wenn man anzeigen möchte, dass ein Attribut ein internes Detail ist, dann nimmt man *einen* führenden Unterstrich. „private” gibt es Python nicht — auch an `__foo` kann man problemlos von aussen heran kommen, wenn man das unbedingt möchte.

Triviale Getter/Setter sind in Python unüblich. Man greift direkt auf die Attribute zu. Für „berechnete Attribute” gibt es `property()`. Damit kann man seine Meinung auch später noch ändern, ohne die API ändern zu müssen.
-dude-
User
Beiträge: 16
Registriert: Samstag 25. Februar 2012, 09:43

Danke für deine Hilfe. Das man von außen Zugriff auf __bar variablen hat wusste ich aber die Konventionen waren mir bisher nicht klar. Das werde ich beherzigen.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

-dude- hat geschrieben:

Code: Alles auswählen

k = K
Hier war sicherlich

Code: Alles auswählen

k = K()
gemeint, oder?
-dude-
User
Beiträge: 16
Registriert: Samstag 25. Februar 2012, 09:43

Ja klar...
Antworten