Seite 1 von 1

Variable kopieren

Verfasst: Freitag 27. April 2007, 19:41
von sprudel
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?

Verfasst: Freitag 27. April 2007, 20:49
von Sr4l

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.

Verfasst: Freitag 27. April 2007, 21:04
von Rebecca
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

Verfasst: Freitag 27. April 2007, 21:36
von Sr4l
ich wollte mich ja auch nur auf den inhalt beziehen.

Verfasst: Freitag 27. April 2007, 22:06
von rayo
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

Verfasst: Freitag 27. April 2007, 22:07
von 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.

Verfasst: Freitag 27. April 2007, 23:33
von birkenfeld
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]... ;)