Ответ
В 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-библиотеками.
Ответ 18+ 🔞
А, ну это же про то, как в Питоне заглянуть в кишки памяти, да? Ну, слушай, бывает же такое, что тебе надо не просто объект посмотреть, а прям вот его адрес в оперативке узнать, где он, сука, притаился. Так вот, для этого есть функция 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
Видишь? Взяли число, узнали, где оно живёт, а потом через ctypes.cast сказали: «Эй, память, по этому адресу лежит питоновский объект, дай-ка его сюда!». И она, такая доверчивая, отдала. Но это, ёпта, чисто для понимания, как всё устроено внутри. В нормальном коде так делать — это искать себе приключения на свою жопу.