Основы и типы данных
4 вопросов'==' проверяет равенство значений (вызывает __eq__), а 'is' — идентичность объектов (проверяет, что id(a) == id(b)).
Изменяемые (mutable): list, dict, set, bytearray. Неизменяемые (immutable): int, float, str, tuple, frozenset, bytes.
Python автоматически сохраняет короткие строки и строки, похожие на идентификаторы, в кэше, чтобы повторно использовать один и тот же объект в памяти.
Shallow copy создает новый объект, но вкладывает ссылки на оригинальные вложенные объекты. Deep copy рекурсивно копирует всё содержимое.
import copy
shallow = copy.copy(obj)
deep = copy.deepcopy(obj)
Функции и замыкания
3 вопросовНужно создать функцию-обертку высшего порядка, которая принимает аргументы и возвращает фактический декоратор.
def repeat(n):
def decorator(func):
def wrapper(*args, **kwargs):
for _ in range(n): func(*args, **kwargs)
return wrapper
return decorator
Он копирует метаданные оригинальной функции (имя, docstring) в обертку декоратора, чтобы отладка и помощь в IDE работали корректно.
Итератор — это объект с методом __next__. Генератор — это частный случай итератора, создаваемый функцией с yield или выражением.
Объектно-ориентированное программирование
4 вопросовMRO определяет порядок поиска методов при множественном наследовании. В Python используется алгоритм C3, доступен через Class.mro().
classmethod принимает ссылку на класс (cls) первым аргументом, а staticmethod не получает специальных аргументов и ведет себя как обычная функция внутри пространства имен класса.
Он жестко ограничивает набор атрибутов экземпляра, предотвращая создание __dict__. Это значительно экономит память при создании миллионов объектов.
class Point:
__slots__ = ('x', 'y')
Метаклассы — это 'классы для классов'. Они определяют, как создаются сами объекты-классы (по умолчанию это type).
Память и производительность
2 вопросовОсновной механизм — подсчет ссылок. Дополнительный — generational GC (три поколения), который ищет циклические ссылки.
Global Interpreter Lock предотвращает выполнение нескольких потоков байт-кода одновременно для защиты управления памятью (счетчиков ссылок).
Асинхронность и многопоточность
3 вопросовПотоки делят общую память, но ограничены GIL. Процессы имеют свою память, работают параллельно на разных ядрах, но требуют межпроцессного взаимодействия (IPC).
Это бесконечный цикл, который следит за состоянием задач (Future/Task). Когда задача ожидает ввода-вывода, цикл переключается на другую готовую задачу.
gather используется для одновременного запуска и ожидания результатов, wait дает более гибкий контроль (например, возврат после первого завершения).