Heim >Backend-Entwicklung >Python-Tutorial >Erstellt die Python-Zuweisung Kopien oder Verweise auf Objekte?

Erstellt die Python-Zuweisung Kopien oder Verweise auf Objekte?

Susan Sarandon
Susan SarandonOriginal
2024-12-19 12:25:14239Durchsuche

Does Python Assignment Create Copies or References to Objects?

Weist Python Referenzen oder Kopien zu?

Problem:

Pythons Zuweisungsverhalten kann verwirrend sein, wenn mit Objekten wie z. B. gearbeitet wird Wörterbücher. Betrachten Sie den folgenden Code:

dict_a = dict_b = dict_c = {}
dict_c['hello'] = 'goodbye'

print(dict_a)
print(dict_b)
print(dict_c)

Erwartete Ausgabe:

{}
{}
{'hello': 'goodbye'}

Tatsächliche Ausgabe:

{'hello': 'goodbye'}
{'hello': 'goodbye'}
{'hello': 'goodbye'}

Erklärung:

Python-Variablen beziehen sich auf Objekte im Speicher. Wenn Sie dict_a = dict_b zuweisen, kopieren Sie nicht das Wörterbuchobjekt selbst, sondern weisen stattdessen einen Verweis auf dieselbe Speicheradresse wie dict_b zu. Das bedeutet, dass an einem Wörterbuch vorgenommene Änderungen sich auf alle drei Variablen auswirken, da sie auf dasselbe zugrunde liegende Objekt verweisen.

Lösung:

Um eine echte Kopie eines zu erstellen Um ein Objekt in Python zu erstellen, müssen Sie die Funktionen copy oder copy.deepcopy verwenden. Der folgende Code erstellt unabhängige Kopien des Originalwörterbuchs:

dict_a = dict_b.copy()  # Shallow copy
dict_a = copy.deepcopy(dict_b)  # Deep copy
  • Flache Kopie: Erstellt ein neues Wörterbuch, das auf dieselben verschachtelten Objekte wie das Original verweist.
  • Deep Copy: Erstellt ein neues Wörterbuch und kopiert alle verschachtelten Elemente rekursiv Objekte.

Durch die Verwendung dieser Funktionen können Sie sicherstellen, dass Änderungen an einem Wörterbuch keine Auswirkungen auf die anderen haben.

Das obige ist der detaillierte Inhalt vonErstellt die Python-Zuweisung Kopien oder Verweise auf Objekte?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn