Объекты маленького intgers (-5.. 256) никогда создаваемый дважды:
>>> a1 = -5; b1 = 256
>>> a2 = -5; b2 = 256
>>> id(a1) == id(a2), id(b1) == id(b2)
(True, True)
>>>
>>> c1 = -6; d1 = 257
>>> c2 = -6; d2 = 257
>>> id(c1) == id(c2), id(d1) == id(d2)
(False, False)
>>>
Редактирование: Объекты списка никогда не уничтожали (только возражает в списках). Python имеет массив, в котором он поддерживает на высоком уровне к 80 пустым спискам. При уничтожении объекта списка - Python помещает его в тот массив и когда Вы создаете новый список - Python получает последний загнанный список от этого массива:
>>> a = [1,2,3]; a_id = id(a)
>>> b = [1,2,3]; b_id = id(b)
>>> del a; del b
>>> c = [1,2,3]; id(c) == b_id
True
>>> d = [1,2,3]; id(d) == a_id
True
>>>
Несколько идей:
Вот как бы я поступил:
Я всегда считал, что этот способ работы развивает систему, и что на самом деле заставляя что-то работать, вы сосредотачиваете свой дизайн на том, что важно (а не на полетах фантазии, которые могут бывает с бумажным дизайном).
И я думал, что агилиста во мне больше нет; -)
Помимо общих советов по программированию, стоит изучить некоторые основы теории проектирования программных фреймворков. Для начала разберемся с понятиями «горячие точки» и «замороженные точки». Хотя это может показаться не сразу полезным, его хорошо держать в голове во время разработки.
Как всегда, хорошей отправной точкой является википедия:
http://en.wikipedia.org/wiki/Software_framework
Также хорошее резюме здесь:
http://www.acm.org/crossroads/xrds7-4/frameworks.html
Если вы хотите глубже, взгляните на цитаты в обеих этих статьях .
Некоторые из приведенных ниже советов зависят от того, создаете ли вы фреймворк исключительно для внутреннего использования небольшой командой на ограниченном наборе проектов или создаете что-то для использования многими анонимными разработчиками. Также имейте в виду, что многое зависит от размера вашего фреймворка и от того, насколько широк или узок его охват. Некоторые из моих советов действительно применимы только к более крупным многоцелевым фреймворкам.
Общий совет
Рекомендации по проектированию
Рекомендации по реализации
Использовать интерфейсы в контрактах API. Это позволяет полностью отделить беспорядочные детали и при необходимости легко их украсить. (Просто посмотрите Свойства, которые представляют собой тонко замаскированные Карты.)
Очень хороший совет - использовать дизайн, управляемый тестированием, то есть сначала напишите тест, а затем реализацию. Это заставляет вас думать как ПОЛЬЗОВАТЕЛИ, а не дизайнер, что в конечном итоге приведет к созданию лучшего API.