python - Python 中的引用

标签 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'

非常感谢任何有关如何解决此问题的帮助。

更新:

我也试过这种方法:

>>> 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/

相关文章:

python - 在 python 中使用 *args 而不是将列表作为参数传递的优点

python - PyMongo 游标迭代

Python 方法与函数

c - 在优化方面,定义带参数和不带参数的函数指针有什么区别

c++ - NULL 指针比较失败

c++ - 将 args 作为对具有(无)常量性的指针的引用传递给不同的地址

python - 数据从 Spark 中的 RDD 获取进程的顺序是什么?

c++使用每个元素引用初始化数组?

java - Android/Java关闭onClick问题?

C++ : 类 类名::引用 { ... }