2 Stimmen

Python unveränderliche Typen in Funktionsaufrufen

Ich habe eine Sqlalchemy-Abfrage, die ein Tupel zurückgibt. Ich übergebe dieses Tupel an eine Funktion, und da es ein unveränderlicher Typ ist, wird in der aufgerufenen Funktion eine neue Instanz des Tupels erstellt.

Wie geht Python mit diesem in Bezug auf die Speicherverwaltung? Wird eine vollständige Kopie des Tupels erstellt, oder wird eine clevere "copy on write/zero copy" ähnliche Funktionalität verwendet?

Das Problem für mich ist, dass diese ursprünglichen Tupel große Mengen an Speicher verbrauchen können, und allein durch den Aufruf einer Funktion, um sie zu verarbeiten, verdoppelt Python den Speicherverbrauch.

Wie kann ich diese Ineffizienz vermeiden, außer indem ich den Code inline schreibe?

2voto

yan Punkte 20278

Wenn Sie eine Funktion aufrufen, wird nur ein Verweis auf das Tupel übergeben, keine Kopie. Die Tatsache, dass es unveränderlich ist, bedeutet nicht, dass es bei einem Funktionsaufruf kopiert wird, sondern nur, dass es nicht verändert werden kann.

0voto

jack_carver Punkte 1480

Python übergibt Referenzen auf Objekte als Wert. Sie müssen sich also nicht darum kümmern.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X