Python, то есть язык программирования, не имеет понятия о местах памяти или указателях.Так что с этой точки зрения нет ответа на ваш вопрос.На ваш вопрос можно ответить только для конкретной реализации python, например CPython .
Тем не менее, ответ будет нет для почти каждой реализации Python.Это потому, что (большинство) классов Python хранят свои атрибуты в словаре.Мы можем получить доступ к этому словарю через имя __dict__
:
>>> Point(1, 2).__dict__
{'x': 1, 'y': 2}
Так как дикты должны быть эффективными и иметь время поиска O (1), они обычно реализуются как хеш-таблицы .Вероятность того, что x
и y
окажутся рядом друг с другом в хеш-таблице, очень мала.
Однако не все классы используют словарь для хранения атрибутов.Есть два исключения:
- Встроенные классы, такие как словари, целые числа, строки и т. Д.
- Классы с атрибутом
__slots__
Специальная переменная класса __slots__
позволяет нам сообщить python, какие атрибуты будет иметь класс.Тогда Python выделит только достаточно памяти для хранения этих атрибутов, а попытка создать любые другие атрибуты вызовет ошибку:
class Point:
__slots__ = ('x', 'y')
def __init__(self, x, y):
self.x = x
self.y = y
>>> p = Point(1, 2)
>>> p.x
1
>>> p.__dict__
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'Point' object has no attribute '__dict__'
>>> p.z = 3
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'Point' object has no attribute 'z'
Если класс использует __slots__
, гораздо более вероятно, чтовсе его атрибуты хранятся рядом друг с другом в памяти.Но это все еще не гарантия.Реализация Python может хранить атрибуты по своему усмотрению.