更改字典中的值,更改原始返回字典的值
Changing the values in a dict, changes the values of the original returned dict
def data_query(Chan, Mode, Format, Sampling, Wave_Data):
if Mode.get_state() == 'NORM':
if Chan.get_state() == 'CHAN1':
wave_dict = Wave_Data.get_wave_data(1)
if Format.get_state() == 'ASCII':
return wave_dict
elif Format.get_state() == 'BYTE':
for i in range(0, len(wave_dict)):
wave_dict[i] = bin(int(wave_dict[i]))
return wave_dict
所以在上面的代码中,参数 'Wave_Data' 是另一个 class 的实例,它保存了函数 [=22= 返回的字典 'self.wave1' 的值].
def get_wave_data(self, channel=1):
if channel == 1:
return self.wave1
elif channel == 2:
pass
我的问题是,在上面的代码中,当我更改本地字典中的值时 - 'wave_dict'(即将值转换为二进制),它也会更改 self.wave1 中的值。如果我理解正确,它充当指向 self.wave1 对象(我通过另一个线程使用 udp 套接字进行流式传输)的指针,而不是普通的局部变量。
顺便说一句,第一个代码块是主线程中的一个函数,第二个代码块是 class 中的一个函数,即 运行 作为守护线程,其实例是也传入了'data_query'函数。
如有任何帮助,我们将不胜感激。抱歉,如果我在任何地方使用了错误的术语。
我通过创建一个数组并将十六进制(字典值)附加到这个数组,然后返回数组而不是字典来解决这个问题。
然后我在接收端通过 try-except 来处理它以接受字典或列表:
try:
Wdata = list(Wdata_dict.values())
except:
Wdata = Wdata_dict
def data_query(Chan, Mode, Format, Sampling, Wave_Data):
if Mode.get_state() == 'NORM':
if Chan.get_state() == 'CHAN1':
wave_dict = Wave_Data.get_wave_data(1)
if Format.get_state() == 'ASCII':
return wave_dict
elif Format.get_state() == 'BYTE':
for i in range(0, len(wave_dict)):
wave_dict[i] = bin(int(wave_dict[i]))
return wave_dict
所以在上面的代码中,参数 'Wave_Data' 是另一个 class 的实例,它保存了函数 [=22= 返回的字典 'self.wave1' 的值].
def get_wave_data(self, channel=1):
if channel == 1:
return self.wave1
elif channel == 2:
pass
我的问题是,在上面的代码中,当我更改本地字典中的值时 - 'wave_dict'(即将值转换为二进制),它也会更改 self.wave1 中的值。如果我理解正确,它充当指向 self.wave1 对象(我通过另一个线程使用 udp 套接字进行流式传输)的指针,而不是普通的局部变量。
顺便说一句,第一个代码块是主线程中的一个函数,第二个代码块是 class 中的一个函数,即 运行 作为守护线程,其实例是也传入了'data_query'函数。
如有任何帮助,我们将不胜感激。抱歉,如果我在任何地方使用了错误的术语。
我通过创建一个数组并将十六进制(字典值)附加到这个数组,然后返回数组而不是字典来解决这个问题。
然后我在接收端通过 try-except 来处理它以接受字典或列表:
try:
Wdata = list(Wdata_dict.values())
except:
Wdata = Wdata_dict