我有一个多播网络,需要不断地向所有其他用户发送数据。这些数据会不断变化,所以我不希望程序员必须处理向用户发送数据包的问题。因此,我试图找出如何在 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'
非常感谢任何有关如何解决此问题的帮助。
更新:
我也试过这种方法:
>>> 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!'}
这确实奏效了。 然而,
>>> 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!'}
这是行不通的。我需要'ftw!变得“不同”。在这种情况下。 我正在使用字符串进行测试,并且习惯于将字符串作为来自其他语言的对象。我将只编辑对象内部的内容,所以这最终会起作用吗?
最佳答案
在 python 中,一切都是引用,但字符串是不可变的。所以 test
持有对“test”的引用。如果您将“this should change”分配给 test
,您只需将其更改为另一个引用。但是您的客户仍然可以引用“测试”。或更短:它在 python 中不起作用! ;-)
一个解决方案可能是将数据放入一个对象中:
data = {'someKey':"test"}
mdc.add(data)
现在您的客户持有对字典的引用。如果您像这样更新字典,您的客户将看到更改:
data['someKey'] = "this should change"
关于python - Python 中的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6191966/