Einige Freunde und ich waren Dinge im Zusammenhang mit der Speicherverwaltung in Python zu diskutieren, wenn wir auf das Verhalten unter gestolpert:Kann jemand das Verhalten leerer dicts in Python-Generator-Ausdrücken erklären?
In [46]: l = ({} for _ in range(6))
In [47]: [ id(i) for i in l]
Out[47]:
[4371243648, # A
4371245048, # B
4371243648, # A
4371245048, # B
4371243648, # etc.
4371245048]
Was überraschend ist dabei, dass wir gut definierten Verhaltensweisen nicht zu haben scheinen: die dict ist weder eine neue noch jedes Mal die gleiche Referenz.
Darüber hinaus haben wir dieses seltsame Verhalten (nicht Code wurde im Interpreter zwischen diesen beiden Schnipsel ausgeführt).
In [48]: m = ({} for _ in range(6))
In [49]: [ id(i) for i in m]
Out[49]:
[4371154376, # C
4371245048, # B (same B as above!)
4371154376, # C
4371245048, # B
4371154376,
4371245048]
Kann jemand dieses Verhalten erklären? Bei Verwendung von Listen-Comprehensions (l = [{} for _ in range(6)]
) werden für jedes Diktat unterschiedliche Adressen angezeigt.
[Diese Frage] (http://stackoverflow.com/q/28963860/2003420) könnte Ihnen eine gute Vorstellung davon geben, was gerade passiert – bvidal
Haben Sie die ['id()' Funktionsdokumentation gelesen] (https://docs.python.org/2/library/functions.html#id)? Du hast etwas Entscheidendes verpasst. –
@MartijnPieters Ich bin nicht überrascht, dass 'id() 'die gleiche Nummer wieder verwendet. Ich war über das Gesicht überrascht, dass es die gleiche Nummer wieder verwendete *, während ich einen Hinweis darauf behielt * (was mein Irrtum war). – sitaktif