Python восстанавливает память после удаления элементов в словаре

У меня относительно большой словарь на Python, и я хотел бы иметь возможность не только удалять из него элементы, но и фактически восстанавливать память из этих удалений в моей программе . Я столкнулся с проблемой, при которой, хотя я удаляю элементы из словаря и даже запускаю сборщик мусора вручную, похоже, что Python не освобождает память.

Простой пример этого:

>>> tupdict = {}
# consumes around 2 GB of memory
>>> for i in xrange(12500000):
...   tupdict[i] = (i,i)
... 
# delete over half the entries, no drop in consumed memory
>>> for i in xrange(7500000):
...   del tupdict[i]
... 
>>> import gc
# manually garbage collect, still no drop in consumed memory after this
>>> gc.collect()
0
>>> 

Я представляю, что происходит состоит в том, что, хотя записи удаляются и запускается сборщик мусора, Python не изменяет размер словаря. Мой вопрос: есть ли простой способ обойти это? -------------------------------------------------- --- package_id int (10) первичный ключ, автоинкремент имя_пакета varchar (255) цена ...

У меня есть три таблицы:

table "package"
-----------------------------------------------------
package_id      int(10)        primary key, auto-increment
package_name    varchar(255)
price           decimal(10,2)

table "zones"
------------------------------------------------------
zone_id         varchar(32)    primary key (ex of data: A1, Z2, E3, etc)

table "package_zones"
------------------------------------------------------
package_id     int(10)
zone_id        varchar(32)

Я пытаюсь вернуть всю информацию в таблице пакетов ПЛЮС список зон для этого пакета. Я хочу, чтобы список зон был отсортирован в алфавитном порядке и разделен запятыми.

Итак, результат, который я ищу, выглядит примерно так ...

+------------+---------------+--------+----------------+
| package_id | package_name  | price  | zone_list      |
+------------+---------------+--------+----------------+
| 1          | Red Package   | 50.00  | Z1,Z2,Z3       |
| 2          | Blue Package  | 75.00  | A2,D4,Z1,Z2    |
| 3          | Green Package | 100.00 | B4,D1,D2,X1,Z1 |
+------------+---------------+--------+----------------+

Я знаю, что могу сделать что-то в PHP со слоем представления, чтобы получить желаемый результат . Проблема в том, что я хотел бы иметь возможность сортировать zone_list ASC или DESC или даже использовать «WHERE zone_list LIKE» и так далее. Для этого мне нужно, чтобы это было сделано в MYSQL.

Я не знаю, как даже начать решать эту проблему. Я пробовал использовать подзапрос, но он продолжал жаловаться на несколько строк. Я попытался объединить несколько строк в одну, но, очевидно, MySQL не любит этого.

Заранее спасибо.

ОБНОВЛЕНИЕ!

Вот решение для тех, кому интересно.

SELECT 
    `package`.*,
    GROUP_CONCAT(`zones`.`zone` ORDER BY `zones`.`zone` ASC SEPARATOR ','  )  as `zone_list`
FROM 
    `package`,
    `package_zones`
LEFT JOIN 
    (`zones`,`ao_package_zones`) ON (`zones`.`zone_id` = `package_zones`.`zone_id` AND `package_zones`.`package_id` = `package`.`package_id`)
GROUP BY 
    `ao_package`.`package_id`
34
задан mrbinky3000 14 October 2010 в 20:08
поделиться