【问题标题】:Changing the values in a dict, changes the values of the original returned dict更改字典中的值,更改原始返回的字典的值
【发布时间】:2020-04-11 15:56:04
【问题描述】:
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”是另一个类的实例,它保存由函数“get_wave_data”返回的字典“self.wave1”的值。

    def get_wave_data(self, channel=1):
        if channel == 1:
            return self.wave1
        elif channel == 2:
            pass

我的问题是,在上面的代码中,当我更改本地 dict - 'wave_dict' 中的值(即将值转换为二进制)时,它也会更改 self.wave1 中的值。如果我理解正确,它充当指向 self.wave1 对象(我通过另一个线程使用 udp 套接字进行流式传输)的指针,而不是普通的局部变量。

顺便说一句,第一个代码块是主线程中的一个函数,第二个代码块是一个作为守护线程运行的类中的一个函数,其实例也在“data_query”函数中传递。

任何帮助将不胜感激。抱歉,如果我在任何地方使用了错误的术语。

【问题讨论】:

    标签: python-3.x multithreading dictionary object-oriented-analysis


    【解决方案1】:

    我通过创建一个数组并将十六进制(字典值)附加到这个数组,然后返回数组而不是字典来解决这个问题。

    然后我在接收端通过 try-except 处理这个来接受字典或列表:

            try:
                Wdata = list(Wdata_dict.values())
            except:
                Wdata = Wdata_dict
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-08
      • 1970-01-01
      • 2012-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-13
      相关资源
      最近更新 更多