Объединение запросов AJAX с использованием $ .when и отправка данных в функцию

Если вы прочитали документацию для id , в ней говорится:

Вернуть «идентификатор» объекта. Это целое число, которое гарантировано будет уникальным и постоянным для этого объекта в течение его жизни. Два объекта с неперекрывающимися временами жизни могут иметь одинаковое значение id().

blockquote>

И это именно то, что происходит: у вас есть два объекта с неперекрывающимися сроками службы, потому что первый из них уже вышел


Но не верьте, что это будет всегда . Особенно, если вам нужно иметь дело с другими реализациями Python или с более сложными классами. Все, что говорит язык, состоит в том, что эти два объекта могут иметь одинаковое значение id(), а не то, что они будут . И тот факт, что они делают , зависит от двух деталей реализации:

  • Сборщик мусора должен очистить первый объект, прежде чем ваш код даже начнет выделять второй объект- который, как гарантируется, произойдет с CPython или любой другой реализацией пересчета (когда нет круговых ссылок), но довольно маловероятен с коллективным сборщиком мусора, как в Jython или IronPython.
  • Распределитель под крышками имеет чтобы иметь очень сильное предпочтение повторного использования недавно освобожденных объектов того же типа. Это справедливо в CPython, который имеет несколько уровней фантастических распределителей поверх базового C malloc, но большинство других реализаций намного больше уходят в основную виртуальную машину.

Последнее: факт, что object.__repr__ имеет подстроку, которая оказывается такой же, как id как шестнадцатеричное число, является всего лишь артефактом реализации CPython, который нигде не гарантируется. Согласно docs :

Если это вообще возможно, это должно выглядеть как действительное выражение Python, которое может быть использовано для воссоздания объекта с тем же значением (с учетом соответствующая среда). Если это невозможно, должна быть возвращена строка формы <...some useful description…>.

blockquote>

Тот факт, что CPython object, кажется, помещает hex(id(self)) (фактически, я считаю, что он делает эквивалент sprintf, указав его указатель на %p, но поскольку CPython id просто возвращает тот же самый указатель, который был добавлен к long, который заканчивается тем же самым) нигде не гарантируется. Даже если это было верно, так как ... до object даже существовало в начале 2.x дней. Вы можете полагаться на него для такого простого простого «что здесь происходит» отладки в интерактивном приглашении, но не пытайтесь использовать его за его пределами.

0
задан Mike 24 February 2015 в 17:06
поделиться