Что выведет код?
Anonymous Quiz
9%
None, Hello
13%
Hello, None
66%
Hello, Hello
13%
Ошибка выполнения
⚙️ Сборщик мусора в Python: как он работает?
В Python управление памятью происходит автоматически с помощью сборщика мусора (Garbage Collector, GC). Он следит за объектами, которые больше не используются, и освобождает занимаемую ими память.
🔹 Подсчет ссылок
Каждый объект хранит количество ссылок на себя. Когда это число становится нулем, объект автоматически удаляется. Однако если два объекта ссылаются друг на друга, но больше нигде не используются, Python не сможет их удалить.
🔹 Алгоритм поколений
Чтобы эффективно управлять памятью, Python разделяет объекты на три группы:
Новые объекты проверяются чаще, а старые — реже, что ускоряет работу сборщика мусора.
🔹 Управление GC
Python справляется сам, но можно управлять GC вручную:
GC в Python делает управление памятью удобным, но понимание его работы помогает писать более эффективный код и избегать утечек памяти.
В Python управление памятью происходит автоматически с помощью сборщика мусора (Garbage Collector, GC). Он следит за объектами, которые больше не используются, и освобождает занимаемую ими память.
🔹 Подсчет ссылок
Каждый объект хранит количество ссылок на себя. Когда это число становится нулем, объект автоматически удаляется. Однако если два объекта ссылаются друг на друга, но больше нигде не используются, Python не сможет их удалить.
🔹 Алгоритм поколений
Чтобы эффективно управлять памятью, Python разделяет объекты на три группы:
•
Gen 0 — новые объекты, проверяются чаще всего.•
Gen 1 — пережившие одну проверку, удаляются реже.•
Gen 2 — долгоживущие объекты, проверяются редко.Новые объекты проверяются чаще, а старые — реже, что ускоряет работу сборщика мусора.
🔹 Управление GC
Python справляется сам, но можно управлять GC вручную:
•
gc.collect() — запустить сборку мусора вручную.•
gc.disable() — отключить GC (не рекомендуется).GC в Python делает управление памятью удобным, но понимание его работы помогает писать более эффективный код и избегать утечек памяти.
Как работает
Метод
✅ Пример:
🔹 Зачем нужно?
⚡️
getitem
в Python?Метод
getitem
позволяет обращаться к объектам класса по индексу или ключу, как к спискам или словарям.✅ Пример:
class CustomList:
def init(self, data):
self.data = data
def getitem(self, index):
return self.data[index] # Позволяет использовать obj[index]
nums = CustomList([10, 20, 30])
print(nums[1]) # 20
🔹 Зачем нужно?
• Позволяет настроить доступ к элементам объекта.
• Делает объекты итерируемыми (например, в for-циклах).
• Помогает создавать свои структуры данных, работающие как списки или словари.⚡️
getitem
делает объекты гибкими и удобными в использовании, улучшая читаемость кода!Что выведет код?
Anonymous Quiz
48%
[2, 3, 4]
35%
deque([2, 3, 4])
13%
deque([1, 2, 3, 4])
3%
Ошибка выполнения
🏗 Как работает
Метод
✅ Пример:
🔹 Зачем нужно?
⚡️ Используйте
call
в Python?Метод
call
позволяет вызывать экземпляр класса как функцию. Если этот метод определён в классе, объект можно использовать как obj()
.✅ Пример:
class Multiplier:
def init(self, factor):
self.factor = factor
def call(self, value):
return value * self.factor
double = Multiplier(2)
print(double(5)) # 10
🔹 Зачем нужно?
• Позволяет создавать объекты-функции.
• Удобно для конфигурируемых вычислений (например, замыканий).
• Улучшает читаемость, убирая лишние .method()
вызовы.⚡️ Используйте
call
, если хотите, чтобы объект вёл себя как функция!⚡️ Как работает
Декоратор
✅ Пример:
🔹 Зачем нужен?
⚡️ Используйте
@staticmethod
в Python?Декоратор
@staticmethod
превращает метод класса в обычную функцию внутри класса, которая не получает ссылку на экземпляр (self
) или класс (cls
).✅ Пример:
class MathUtils:
@staticmethod
def add(x, y):
return x + y
print(MathUtils.add(3, 5)) # 8
🔹 Зачем нужен?
• Используется, когда метод не зависит от состояния экземпляра или класса.
• Делает код логичнее, если метод просто выполняет действие, связанное с классом.
• Упрощает структуру, так как не требует создания объекта для вызова.⚡️ Используйте
@staticmethod
, если метод не работает с self
или cls
, но логически относится к классу!Что выведет код?
Anonymous Quiz
33%
[(1, 2), (1, 3), (2, 3)]
24%
[(1, 2), (2, 3), (3, 1)]
33%
[(1, 2), (1, 3), (2, 3), (3, 1)]
9%
Ошибка выполнения
🏷 Что такое
✅ Пример:
🔹 Зачем использовать?
⚡️
functools.lru_cache
и зачем он нужен?functools.lru_cache
— это декоратор для автоматического кэширования результатов функций. Он ускоряет выполнение, избегая повторных вычислений.✅ Пример:
from functools import lru_cache
@lru_cache(maxsize=100) # Кэшируем до 100 результатов
def fib(n):
if n < 2:
return n
return fib(n - 1) + fib(n - 2)
print(fib(10)) # 55 (значительно быстрее благодаря кэшу)
🔹 Зачем использовать?
• Ускоряет повторяющиеся вычисления.
• Уменьшает нагрузку на процессор при рекурсивных вызовах.
• Экономит память благодаря ограничению maxsize
.⚡️
lru_cache
особенно полезен для функций с повторяющимися входными данными!Как работает itertools.cycle в Python?
✅ Пример:
🔹 Зачем использовать?
itertools.cycle
создаёт бесконечный итератор, который зацикливает последовательность, перезапуская её с начала после завершения.✅ Пример:
from itertools import cycle
colors = ["red", "green", "blue"]
color_cycle = cycle(colors)
for _ in range(5):
print(next(color_cycle)) # red → green → blue → red → green
🔹 Зачем использовать?
• Повторение элементов списка без переписывания вручную.
• Автоматическое зацикливание без индексов.
• Полезно в анимациях, смене тем, бесконечных процессах.itertools.cycle
— мощный инструмент для циклических операций без лишнего кода.Что выведет код?
Anonymous Quiz
45%
Alice 30
38%
('Alice', 30)
10%
['Alice', 30]
7%
Ошибка выполнения
🔄 Как работает
✅ Пример:
Обычно для объединения списков используют
itertools.chain
в Python?itertools.chain
позволяет объединять несколько итерируемых объектов в один, не создавая новых списков. Это экономит память и делает код чище.✅ Пример:
from itertools import chain
list1 = [1, 2, 3]
list2 = [4, 5, 6]
for num in chain(list1, list2):
print(num) # 1 2 3 4 5 6
Обычно для объединения списков используют
+
, но это создаёт новый список в памяти.
chain
позволяет перебирать элементы последовательно, без лишних затрат, что особенно полезно при работе с большими наборами данных или генераторами.❓ Что делает метод
Метод
✅ Пример использования:
В отличие от
new
в Python и когда его использовать?Метод
new
отвечает за создание нового экземпляра класса перед его инициализацией в init
. Он используется в случаях, когда нужно контролировать процесс создания объекта, например, в синглтонах или при наследовании от неизменяемых типов (int
, str
, tuple
).✅ Пример использования:
class Singleton:
_instance = None
def new(cls, *args, **kwargs):
if cls._instance is None:
cls._instance = super().new(cls)
return cls._instance
obj1 = Singleton()
obj2 = Singleton()
print(obj1 is obj2) # True (оба объекта — одна и та же ссылка)
В отличие от
init
, new
контролирует сам процесс создания объекта. Полезен для ограничения числа экземпляров и работы с неизменяемыми классами.