Variable kopieren

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
sprudel
User
Beiträge: 250
Registriert: Donnerstag 8. März 2007, 17:12

Hallo.

Wie ist es möglich, eine Variable nicht als Verweis zu definieren, sondern sie wirklich zu kopieren? Ich wollte folgendes machen:

DBLINK = ...
xy = DBLINK
DB.Close()

aber jetzt kann ich ja nicht mehr auf xy zugerifen.

Ich muss es in meinem Fall leider so machen.
Gibt es da irgendeine Lösung?
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Code: Alles auswählen

IDLE 1.2.1c1      ==== No Subprocess ====
>>> x = 123
>>> y = x
>>> x == y
True
>>> x = 456
>>> x == y
False
>>> x
456
>>> y
123
>>> 
An meinem Beispiel siehst du das y eine Kopie von x ist. Sonst würde sich beim ändern von x auch y ändern. Aber wenn du etwas closed ist es zu.
Du musst es schon wieder öffnen.
Also nur weil du die Variable kopierst mit der z.B ein File Opject geöffnet wurde lässt das die Datei nicht offen.
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Sr4l hat geschrieben:An meinem Beispiel siehst du das y eine Kopie von x ist. Sonst würde sich beim ändern von x auch y ändern.
Falsch. Der ==-Operator vergleicht Integers auf ihren Inhalt. Testen auf Identitaet geht mit "is". Und natuerlich aendert sich y nicht, wenn du x nun auf ein anderes Objekt zeigen laesst.

Code: Alles auswählen

>>> x = 123
>>> y = x
>>> x is y
True
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

ich wollte mich ja auch nur auf den inhalt beziehen.
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Hi

y ist keine Kopie von x sondern die Zahl 123 ist an die Namen x und y gebunden.
Mit "x = 456" bindest du 456 an den Namen x, davon erfährt y natürlich nichts weil man das Integer-Objekt (123) gar nicht anfasst.

Aber wieder OnTopic:
Das Datenbank-Objekt ist an den Namen DBLink und xy gebunden.
Entweder stellt das Datenbank-Objekt eine Methode zur Verfügung mit der man das Objekt kopieren kann (was ich aber nicht annehme) oder du machst einfach eine zweite Verbindung auf.

Gruss
BlackJack

@sprudel: Man kann nicht alle Objekte kopieren und ich denke mal Deine Datenbankverbindung gehört dazu. Da dürfte Zustandsinformation auf der Seite der Datenbanksoftware bestehen, auf die Python keinen Zugriff oder Einfluss hat.
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Sr4l hat geschrieben: An meinem Beispiel siehst du das y eine Kopie von x ist. Sonst würde sich beim ändern von x auch y ändern.
Und wieder ein Kandidat für [wiki]Objekte[/wiki]... ;)
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Antworten