Я хотел обновить dict
в dict
, снаружи один из них инстанцирован через multiprocessing.Manager()
:Почему Manager(). Dict() обновляется только на одном уровне?
import multiprocessing
def worker(key, container):
# this one is not applied
container['a'][key] = key
# this one is
container[key] = 3
if __name__ == "__main__":
multiprocessing.freeze_support()
c = multiprocessing.Manager().dict()
c['a'] = {}
p1 = multiprocessing.Process(target=worker, args=('x',c,))
p2 = multiprocessing.Process(target=worker, args=('y',c,))
p1.start()
p2.start()
p1.join()
p2.join()
print(c.copy())
Выход этого кода
{'y': 3, 'a': {}, 'x': 3}
Я ожидал получить
{'y': 3, 'a': {'x': 'x', 'y': 'y'}, 'x': 3}
Первый уровень dict
адресуется в worker
, но операции с вложенными dict
молча отбрасываются. Зачем?
Я сначала подумал, что это мой быть из-за мелкой копии, но вывод тот же при использовании copy.deepcopy()