При добавлении в список JSON объектов в python, почему он дублирует только объекты "2-го уровня"? - PullRequest
0 голосов
/ 24 января 2020

Вот мой код.

def generateNewDevices(numofdevices):
    global simulated_devices
    for x in range(numofdevices):
        new_device = reference_device.copy()
        new_device["accel"]["accx"] = random.randint(-32768, 32767)
        new_device["accel"]["accy"] = random.randint(-32768, 32767)
        new_device["accel"]["accz"] = random.randint(-32768, 32767)
        new_device["location"]["gpsla"] = random.uniform(MINLAT, MAXLAT)
        new_device["location"]["gpslo"] = random.uniform(MINLON, MAXLON)
        new_device["temp"] = random.randint(-127, 127)
        new_device["status"] = random.randint(0, 1)
        str1 = new_device["deviceName"]
        str1 = str1[:-3]
        str2 = str(x).zfill(3)
        str1 += str2
        new_device["deviceName"] = str1
        node_red_send(URL, new_device)
        print(new_device)
        simulated_devices.append(new_device)

generateNewDevices(3)
for x in range(len(simulated_devices)):
    print(simulated_devices[x])

Почему при печати через список значений в конце в списке отображаются данные "нового устройства" для добавленных JSON объектов "1 слой в глубину" (temp, status и name), но дублируют данные для "2 layer deep" (accx, accy, gpsla)?

.copy () находятся там, потому что у меня были проблемы с python append дублируя все значения вначале. Это какой-то вариант того же вопроса? Я даже попробовал .copy () прямо перед добавлением в список. (Я родом из ac / c ++, поэтому не до конца понимаю, почему python делает некоторые вещи)

Любая помощь приветствуется.

Kr, apuri123.

1 Ответ

0 голосов
/ 02 февраля 2020

Я сомневаюсь, что кто-то окажется здесь при поиске ответа, но в случае, если вы это сделаете, вы ищете "deepcopy":

import copy
original = {} #object with as many objects within objects as you want
myCopy = copy.deepcopy(original)

Google "python deepcopy", и вы должны быть в состоянии найти то, что вы ищете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...