Циклическая ссылка в расширении Python C [дубликат]

Я бы также рекомендовал вам экспериментировать с регулярными выражениями с помощью «Expresso» - это утилита - отличная (и бесплатная) утилита для редактирования и тестирования регулярных выражений.

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

Например, при создании своего регулярного выражения с использованием пользовательского интерфейса и выбирая «*», у вас есть возможность проверить флажок «Как можно меньше» и увидеть результирующее резум, а также проверить его поведение, даже если раньше вы не знакомы с не жадными выражениями.

Доступны для загрузки на их сайте: http://www.ultrapico.com/Expresso.htm

Экспресс-загрузка: http://www.ultrapico.com /ExpressoDownload.htm

2
задан Gauthier Boaglio 12 April 2013 в 18:12
поделиться

1 ответ

del a_set удаляет ссылку на объект (локальная переменная). В объекте C ++ есть еще одна ссылка. Это называется эталонным циклом. Цикл GC мог бы собирать это через некоторое время. Тем не менее, нет гарантии, что (или даже если) это произойдет, поэтому вы не должны полагаться на него1.

Например, циклы ссылок, содержащие чистые объекты Python, с __del__ специальный метод документирован , чтобы не быть освобожден вообще :

Изменено в версии 3.4: После PEP 442 объекты с __del__() больше не заканчиваются в gc.garbage.

Я не знаю, запускает ли реализацию Cython __dealloc__ это поведение, но как указано прежде всего, уничтожение в любом случае не является детерминированным. Если вы хотите освободить некоторый ресурс (например, блок памяти, который не является объектом Python, файлом, соединением, блокировкой и т. Д.), Вы должны разоблачить явный способ сделать это вручную (см. close методы различных объектов). Контекстные менеджеры могут упростить код клиента, делая это.

Отказ: почти все это специфично для CPython.

1 Некоторые люди предпочитают думать о GC как абстракции, которая имитирует доступность бесконечной памяти , а не что-то, что уничтожает недостижимые объекты. При таком подходе становится совершенно очевидным, что разрушение не является детерминированным и даже не гарантировано.

4
ответ дан Ioannis Filippidis 1 September 2018 в 05:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: