Heim > Artikel > Backend-Entwicklung > Warum haben leere Tupel, Mengen und Listen in CPython dieselbe ID?
Warum die ID leerer Tupel, Mengen und Listen in CPython gleich bleibt
In CPython leere Tupel, Mengen und Listen unerwartet dieselbe ID verwenden. Dies steht im Gegensatz zum Verhalten veränderlicher Objekte, bei denen jede Instanz eine eindeutige ID hat.
Der Grund für dieses Verhalten liegt in der Speicherzuweisung von CPython. Wenn der Python-Interpreter ein leeres Tupel oder eine leere Liste erstellt, reserviert er einen kleinen Speicherblock. Die ID-Funktion gibt dann die Adresse dieses Speicherblocks zurück, die für alle leeren Tupel oder Listen gleich ist.
Wörterbücher sind zwar auch veränderbar, ihr Verhalten unterscheidet sich jedoch, da sie mehr Speicher benötigen. Beim Erstellen eines neuen leeren Wörterbuchs wird ein eindeutiger Speicherblock zugewiesen und die ID-Funktion gibt die Adresse dieses Blocks zurück.
Um dieses Konzept zu veranschaulichen, führen wir Python-Code aus, der die Konsistenz von IDs für leere Tupel und zeigt Listen:
<code class="python">tuple1 = () tuple2 = () id1 = id(tuple1) id2 = id(tuple2) print(id1 == id2) # Output: True</code>
Dies zeigt, dass mehrere leere Tupel dieselbe ID haben, auch wenn sie separate Objekte sind.
Außerdem bleibt die ID einer leeren Menge oder Liste auch danach gleich Weisen Sie es einer Variablen zu und rufen Sie dann id() auf. Dies liegt daran, dass das anfängliche leere Objekt noch am Leben ist und denselben Speicherort hat.
Zusammenfassend ist die ID eines Objekts in CPython nur für die Lebensdauer des Objekts eindeutig. Sobald das Objekt zerstört ist, kann derselbe Speicherblock für ein anderes Objekt wiederverwendet werden, was zu doppelten IDs führt.
Das obige ist der detaillierte Inhalt vonWarum haben leere Tupel, Mengen und Listen in CPython dieselbe ID?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!