Python中的参考资料

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!' 成为'不同'.在这种情况下.我正在使用字符串进行测试,并习惯将字符串作为其他语言的对象.我只会编辑一个对象里面的内容,所以这最终会起作用吗?

Ach*_*him 5

在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)