Я думаю, что ваши подвопросы возникли из-за неправильного понимания того, как классы работают в Python. То, как вы определили класс C
:
class C:
dic = {}
, означает, что все экземпляры класса будут использовать один и тот же атрибут dic
, потому что это class
, не экземпляр, атрибут при объявлении таким образом.
Чтобы изменить его на атрибут экземпляр , вам нужно сделать что-то вроде этого:
class C:
def __init__(self):
self.dic = {}
Это дает каждому экземпляр своего собственного независимого атрибута (на который не будут влиять изменения, внесенные в него через другие экземпляры, что и происходит, когда он выполняется другим способом).
С этим изменением вывод из вашего сценария становится:
before update: {}
after update {0: 0}
get from queue dic: {0: 0}
before update: {}
after update {0: 1}
get from queue modified by process dic: {0: 1}