Являются ли данные сообщения pypubsub отправленными по ссылке или значению, и почему я не должен изменять данные сообщения - PullRequest
1 голос
/ 17 апреля 2020

Я использую python 3. и хотел бы знать, отправляются ли данные сообщения, прикрепленные к команде pymexub Sendmessage, по ссылке или по значению? Похоже, что оно было отправлено по ссылке, но мне было интересно, может ли кто-нибудь это проверить.

Также в документации говорится: «Неизменность сообщения: содержимое сообщения должно быть оставлено без изменений слушателями, но PyPubSub не проверяет это»

В приведенном ниже примере кода предполагается, что ссылки на аргументы сообщения-данных являются отправка и изменение этих данных изменяют исходные данные (не переданную копию данных). Есть ли причина, по которой изменение данных сообщения в подпрограмме прослушивателя является плохой идеей?

from pubsub import pub

class widget():    
    def __init__(self):
        self.thingy = [{'biz':0},{'baz':1},{'buz':2}]
        pub.subscribe(self.listen_for, 'wodget')

    def listen_for(self, arg1):
        print('wodget heard')
        print(self.thingy)
        print(arg1)

    def send_thingy(self):
        arg1 = self.thingy
        pub.sendMessage('widget',arg1=arg1)

class wodget():    
    def __init__(self):
        self.thongy = None
        pub.subscribe(self.listen_for, 'widget')

    # listen calendar               
    def listen_for(self, arg1):
        print('widget heard')
        print(arg1)
        self.thongy = arg1
        self.thongy[1]['baz']=99
        print(arg1)
        print(self.thongy)
        arg1 = self.thongy
        pub.sendMessage('wodget',arg1=arg1)

if __name__ == "__main__":

    aWidget = widget() 
    aWidget.send_thingy()

    aWodget = wodget()   
    aWidget.send_thingy()
...