Nun, ich habe ein bisschen ausprobiert und mal sehen:
dct = {'four': 3, 'three': 2, 'two': 1, 'one': 0}
print(sys.getsizeof(dct)) # = 272
print(sys.getsizeof(dict(dct))) # = 272
print(sys.getsizeof({k: v for k, v in dct.items()})) # = 272
dct = {'four': 3, 'three': 2, 'five': 4, 'two': 1, 'one': 0}
print(sys.getsizeof(dct)) # = 272
print(sys.getsizeof(dict(dct))) # = 272
print(sys.getsizeof({k: v for k, v in dct.items()})) # = 272
dct = {'six': 5, 'three': 2, 'two': 1, 'four': 3, 'five': 4, 'one': 0}
print(sys.getsizeof(dct)) # = 1040
print(sys.getsizeof(dict(dct))) # = 656
print(sys.getsizeof({k: v for k, v in dct.items()})) # = 1040
dct = {'seven': 6, 'six': 5, 'three': 2, 'two': 1, 'four': 3, 'five': 4, 'one': 0}
print(sys.getsizeof(dct)) # = 1040
print(sys.getsizeof(dict(dct))) # = 656
print(sys.getsizeof({k: v for k, v in dct.items()})) # = 1040
dct = {'seven': 6, 'six': 5, 'three': 2, 'two': 1, 'four': 3, 'five': 4, 'eight': 7, 'one': 0}
print(sys.getsizeof(dct)) # = 656
print(sys.getsizeof(dict(dct))) # = 1040
print(sys.getsizeof({k: v for k, v in dct.items()})) # = 1040
Ich bin nicht sicher, welche Art von Optimierung hier geschieht, aber ich nehme an, es ist, weil diese Strukturen anders verwenden „Best Practices“. Ich meine wann, wie viel Speicher für die Hash-Tabelle ,. Wenn Sie zum Beispiel elf oder mehr Elemente haben Sie eine andere seltsame Diskrepanz erhalten:
dct = {1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, 10:10, 11:11}
print(sys.getsizeof(dct)) # = 1808
print(sys.getsizeof(dict(dct))) # = 1040
print(sys.getsizeof({k: v for k, v in dct.items()})) # = 1040
das so ist wahrscheinlich nur eine Art von Speicherverbrauch „Optimierung“, wenn Wörterbücher auf unterschiedliche Weise zu schaffen, warum gibt es diesen nicht-monotonen Ausreißer für die wörtliche Syntax bei 6 oder 7 Elementen: Ich weiß es nicht. Vielleicht ist eine Speicheroptimierung schief gelaufen und es ist ein Bug, dem zu viel Speicher zugewiesen wurde? Ich habe den Quellcode (noch) nicht gelesen.
https://github.com/python/cpython/blob/2.7/Objects /dictobjekt.c –