2015-12-03 6 views
2

Простой: у меня есть идентификатор объекта Python, и я хочу проверить, есть ли объект с этим идентификатором.Проверьте, существует ли идентификатор объекта в Python

С this SO answer, вы можете получить существующий объект по идентификатору с

import ctypes 
a = 10 
object_id = id(a) 
ctypes.cast(object_id, ctypes.py_object).value 

Но зависает при вызове с произвольным object_id, так что это непрактично решение.

+0

См. [Этот ответ] (http://stackoverflow.com/a/1396690/2683246) – user2683246

ответ

2

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

К сожалению, такого исчерпывающего списка нет. Самое близкое, вероятно, gc.get_objects(), которое возвращает список всех объектов, отслеживаемых сборщиком мусора (исключая сам список). Вы можете найти это для объекта, соответствующего вашему ID, но такие вещи, как x = 1; print x in gc.get_objects(), не найдут объект.

+0

Да, это имеет смысл. Это объект, который не находится в gc.get_objects, который меня интересует. Почему он не отслеживается !? Благодарю. – jmilloy

+1

@jmilloy: '1' не отслеживается, потому что он не может участвовать в эталонном цикле. Какой бы объект вы ни искали, либо он не отслеживается, потому что Python знает, что он не может быть в эталонном цикле, или он уже собран. – user2357112

+0

Объект, который меня интересует, представляет собой массив numpy, который является атрибутом класса. Когда атрибуту присваивается новый объект, кажется, что старый объект никогда не исчезает. – jmilloy

Смежные вопросы