В Python все переменные с технической точки зрения являются ссылками, а не контейнерами значений, независимо от их типа данных. Метафора коробки проста, но не идеальна. Вместо того чтобы рассматривать переменные как коробки, вы также можете рассматривать переменные как наклейки для объектов в памяти. На рис. 7.2 изображены наклейки для переменных spam и eggs из предыдущего примера
Во многих учебниках начального уровня переменные сравниваются с коробками, что представляет собой чрезмерное упрощение. Переменную удобно представить как коробку, в которой находится значение (рис. 7.1), но когда речь заходит о ссылках, метафора начинает рассыпаться. В только что рассмотренном примере в переменных spam и eggs не хранились разные словари; в них хранились ссылки на один словарь, находящийся в памяти компьютера.
Модуль Python timeit позволяет быстро профилировать время выполнения кода; это всегда лучше, чем просто предположить, что какой-то код работает быстрее.
Например, если создать метод __len__() или __repr__() для вашего класса, он будет автоматически вызываться при передаче объекта этого класса функциям len() или repr() соответственно. Такие методы описаны в официальной документации Python на https://docs.python.org/3/reference/datamodel.html.
Атрибут класса представляет собой переменную, которая принадлежит классу, а не объекту. Атрибуты класса создаются внутри класса, но вне любых методов, подобно тому как глобальные переменные создаются в файле .py, но за пределами любых функций.