Nedařilo se mi do slovníku (dictionary) vložit víc než několik desítek milionů položek. Přitom paměti bylo víc než dost. Proto jsem napsal následující skript na zjištěná maximálního počtu položek, které lze do slovníku uložit.
i = 0
d = {}
try:
while True:
d[i] = i
i = i + 1
except MemoryError:
print i
Výsledný počet je 44739242. V hexadecimální soustavě je to 2AAAAAA, což vypadá podezřele. Upozornění: Skript může způsobit pád některých programů.
Řešení problému:
Řešení problému:
class Dict2:
def __init__(self):
self.dicts = [{}]
def value(self, k):
for dict in self.dicts:
if k in dict:
return dict[k]
def isIn(self):
for dict in self.dicts:
if k in dict:
return True
return False
def insert(self, k, d):
for dict in self.dicts:
if k in dict:
dict[k] = d
return
try:
self.dicts[0][k] = d
except MemoryError:
self.dicts.insert(0, {})
self.dicts[0][k] = d
i = 0
d = Dict2()
try:
while True:
d.insert(i, i)
i = i + 1
except MemoryError:
print i