Пример
рассмотрим следующие два источника данных. (очень простой пример на реальных данных, с которыми мы пытаемся работать):
Код: Выделить всё
list_1 = [{ "id": "12", "b": 33, "d": "rty" },
{ "id": "22", "b": 135, "d": "jjj" },
{ "id": "32", "b": 1, "d": "trt" },
{ "id": "42", "b": 1355, "d": "ast" },]
dict_2 = { "12" : { "id": "12", "c": "ada" },
"22" : { "id": "22", "c": "pklm" },
"32" : { "id": "32", "c": "pppf" },
"42" : { "id": "42", "c": "eeef" },}
Код: Выделить всё
newlist = [{ "id": "12", "c": "ada", "d": "rty" },
{ "id": "32", "c": "pppf", "d": "trt" },
Код: Выделить всё
newlist = []
for x in list_1:
if x["b"] < 40:
dict = {"id": x["id"],
"d": x["d"],
"c": (dict_2[x["id"]])["c"] }
newlist.append(dict)
Но в нашем случае нам не нужны ссылки. Нам нужно иметь возможность удалять list_1 и dict_2 из памяти после создания нового списка, чтобы таким образом сэкономить на использовании памяти. Новый список должен продолжать существовать в памяти. List_1 и dict_2 очень большие, а полученный новый список имеет лишь небольшую часть.
Когда мы проверяем с помощью модуля Memory_profiler, мы видим, что Python не освобождает память, используемую list_1 и dict_2. потому что значения, взятые из этих двух источников, затем используются для установки значений в новом списке, и из-за этого два источника все еще должны находиться в памяти из-за ссылок. :/
Как это можно сделать на Python? Можно ли это сделать на Python? Как мы можем получить подлинную копию, а не ссылку на источник? Сейчас мы склоняемся к тому, чтобы записать newdict в файл, стереть все, а затем перезагрузить newdict из файла в память и продолжить оттуда. Но это кажется довольно грубым решением.
Есть идеи?
Подробнее здесь: https://stackoverflow.com/questions/791 ... to-another
Мобильная версия