Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

References in Python

I have a multicasting network that needs to continuously send data to all other users. This data will be changing constantly so I do not want the programmer to have to deal with the sending of packets to users. Because of this, I am trying to find out how I can make a reference to any object or variable in Python (I am new to Python) so it can be modified by the user and changes what is sent in the multicasting packets.

Here is an example of what I want:

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

Any help on how I can fix this would be very much appreciated.

UPDATE:

I have tried it this way as well:

>>> 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!'}

This did work. However,

>>> 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!'}

This does not work. I need 'ftw!' to become 'different.' in this case. I am using strings for testing and am used to strings being objects from other languages. I will only be editing the contents inside of an object so would this end up working?

like image 749
Sonic 4305 Avatar asked May 31 '11 18:05

Sonic 4305


People also ask

How do you use references in Python?

Practical Data Science using PythonAll parameters (arguments) in the Python language are passed by reference. It means if you change what a parameter refers to within a function, the change also reflects back in the calling function.

Are there reference variables in Python?

In Python, a variable is not a label of a value like you may think. Instead, A variable references an object that holds a value. In other words, variables are references. So variables are references that point to the objects in the memory.

How do you create a reference variable in Python?

However, in Python, variable is just a name given to an object in the memory. Even if we assign its value to another variable, both are in fact referring to same object in memory. This can be verified by id() function. It therefore is clear that in Python, we can not create reference to a variable.


1 Answers

In python everything is a reference, but strings are not mutable. So test is holding a reference to "test". If you assign "this should change" to test you just change it to another reference. But your clients still have the reference to "test". Or shorter: It does not work that way in python! ;-)

A solution might be to put the data into an object:

data = {'someKey':"test"}
mdc.add(data)

Now your clients hold a reference to the dictionary. If you update the dictionary like this, your clients will see the changes:

data['someKey'] = "this should change"
like image 88
Achim Avatar answered Oct 05 '22 23:10

Achim