Изменение значений в dict, изменяет значения исходного возвращенного dict - PullRequest
0 голосов
/ 11 апреля 2020
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» является экземпляром другого класса, который содержит значение dict «self.wave1», которое возвращается функцией «get_wave_data».

    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 функция.

Любая помощь будет оценена. Извините, если я где-то использовал неверную терминологию.

1 Ответ

0 голосов
/ 11 апреля 2020

Я исправил это, создав массив и добавив шестнадцатеричные значения (значения dict) к этому массиву, а затем возвращая массив вместо dict.

Затем я обрабатываю это на принимающей стороне с помощью try-кроме принять либо диктовку, либо список:

        try:
            Wdata = list(Wdata_dict.values())
        except:
            Wdata = Wdata_dict
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...