Son*_*305 7 python pointers reference
我有一个多播网络,需要不断向所有其他用户发送数据.这些数据会不断变化,所以我不希望程序员必须处理向用户发送数据包.因此,我试图找出如何在Python中引用任何对象或变量(我是Python新手),因此可以由用户修改它并更改多播数据包中发送的内容.
这是我想要的一个例子:
>>> test = "test"
>>> mdc = MulticastDataClient()
>>> mdc.add(test) # added into an internal list that is sent to all users
# here we can see that we are successfully receiving the data
>>> print mdc.receive()
{'192.168.1.10_0': 'test'}
# now we try to change the value of test
>>> test = "this should change"
>>> print mdc.receive()
{'192.168.1.10_0': 'test'} # want 'test' to change to -> 'this should change'
Run Code Online (Sandbox Code Playgroud)
任何有关我如何解决这个问题的帮助将非常感激.
更新:
我也尝试过这种方式:
>>> test = [1, "test"]
>>> mdc = MulticastDataClient()
>>> mdc.add(test)
>>> mdc.receive()
{'192.168.1.10_1': 'test'}
>>> test[1] = "change!"
>>> mdc.receive()
{'192.168.1.10_1': 'change!'}
Run Code Online (Sandbox Code Playgroud)
这确实有效.然而,
>>> val = "ftw!"
>>> nextTest = [4, val]
>>> mdc.add(nextTest)
>>> mdc.receive()
{'192.168.1.10_1': 'change!', '192.168.1.10_4': 'ftw!'}
>>> val = "different."
>>> mdc.receive()
{'192.168.1.10_1': 'change!', '192.168.1.10_4': 'ftw!'}
Run Code Online (Sandbox Code Playgroud)
这不起作用.我需要'ftw!' 成为'不同'.在这种情况下.我正在使用字符串进行测试,并习惯将字符串作为其他语言的对象.我只会编辑一个对象里面的内容,所以这最终会起作用吗?
在python中,一切都是引用,但字符串不可变.所以test
持有"测试"的参考.如果您指定"this should changed",test
只需将其更改为另一个参考.但是您的客户仍然提到"测试".或更短:它在python中不起作用!;-)
解决方案可能是将数据放入对象:
data = {'someKey':"test"}
mdc.add(data)
Run Code Online (Sandbox Code Playgroud)
现在您的客户端持有对字典的引用.如果您像这样更新字典,您的客户将看到更改:
data['someKey'] = "this should change"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4194 次 |
最近记录: |