Я полагаю, что проблема, с которой вы сталкиваетесь, связана с обнаружением изменения в словаре dic1
анонимным Manager
объектом, с которым вы его создаете.
Изменение самого списка с помощью оператора +=
не приводит к изменению ссылки на список - это тот же список, только один его элемент изменился (а именно 0-й элемент сохраненного списка в поточно-безопасном словаре dic1
под ключом '1'
).
С dic2
ситуация иная. Со следующей строкой:
self.dic2['1'] = [a[0]+1, a[1], a[2]]
Вы эффективно обновляете значение, хранящееся под ключом '1'
. Присвоенное значение является полностью новым списком. Он состоит из элементов списка, сохраненных как предыдущее значение под тем же ключом, но, тем не менее, это список другой .
Такое изменение обнаруживается объектом Manager
, и ссылка в процессе, в котором вы проверяете значение dic2
, легко обновляется, чтобы вы могли прочитать правильное значение.
Главное здесь следующее:
потокобезопасная коллекция (dict
) не передает никаких изменений другим процессам (или потокам), если нет изменений в ключах, или значениях, или в обоих. Список является ссылочным типом, поэтому значение (то есть ссылка) не изменяется даже при изменении значений списка.