Как в Python получить доступ к объекту по его адресу в памяти?

«Как в Python получить доступ к объекту по его адресу в памяти?» — вопрос из категории Операционные системы, который задают на 10% собеседований Python Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Python для получения адреса объекта в памяти используется встроенная функция id(). Она возвращает уникальный идентификатор, который в реализации CPython является адресом объекта.

Для непосредственного взаимодействия с памятью по этому адресу (что является небезопасной и редкой операцией) используется модуль ctypes.

Пример:

import ctypes

# 1. Создаем объект и получаем его адрес
x = 100
address = id(x)

print(f"Объект: {x}")
print(f"Адрес в памяти: {address}")

# 2. Получаем значение объекта по адресу с помощью ctypes
# Мы "приводим" целочисленный адрес к указателю на Python-объект
value_from_memory = ctypes.cast(address, ctypes.py_object).value

print(f"Значение по адресу {address}: {value_from_memory}")
# Вывод:
# Объект: 100
# Адрес в памяти: 140722844979344
# Значение по адресу 140722844979344: 100

Важно: Прямая работа с памятью в Python — это антипаттерн для большинства задач. Она нарушает принципы безопасности и автоматического управления памятью языка. Этот подход следует использовать только в исключительных случаях, например, при отладке или интеграции с C-библиотеками.