🤔 Для чего нужен счетчик ссылок Python?
В Python счетчик ссылок (reference count) используется для управления памятью. Он показывает, сколько раз объект используется в программе. Когда счетчик ссылок падает до нуля, Python автоматически удаляет объект, освобождая память.
🚩Как работает счетчик ссылок?
Python использует автоматическое управление памятью, основанное на подсчёте ссылок. Когда создаётся объект, Python хранит специальное число — количество ссылок на этот объект. Это число увеличивается, когда мы создаём новую ссылку на объект, и уменьшается, когда удаляем или перезаписываем переменную.
🚩Почему это важно?
🟠Эффективное управление памятью
Python сам удаляет ненужные объекты, не давая памяти переполняться.
🟠Понимание утечек памяти
Если объект имеет циклические ссылки (например, список ссылается сам на себя), Python не может освободить его сразу, поэтому дополнительно используется сборщик мусора (Garbage Collector, GC).
Ставь 👍 и забирай 📚 Базу знаний
В Python счетчик ссылок (reference count) используется для управления памятью. Он показывает, сколько раз объект используется в программе. Когда счетчик ссылок падает до нуля, Python автоматически удаляет объект, освобождая память.
🚩Как работает счетчик ссылок?
Python использует автоматическое управление памятью, основанное на подсчёте ссылок. Когда создаётся объект, Python хранит специальное число — количество ссылок на этот объект. Это число увеличивается, когда мы создаём новую ссылку на объект, и уменьшается, когда удаляем или перезаписываем переменную.
import sys
a = [1, 2, 3] # Создаём список
print(sys.getrefcount(a)) # Выведет 2 (одна ссылка 'a' + вызов getrefcount)
b = a # Новая ссылка на тот же объект
print(sys.getrefcount(a)) # Теперь 3 (a, b и сам getrefcount)
del a # Удаляем одну ссылку
print(sys.getrefcount(b)) # Теперь 2
del b # Удаляем последнюю ссылку, объект будет удалён из памяти
🚩Почему это важно?
🟠Эффективное управление памятью
Python сам удаляет ненужные объекты, не давая памяти переполняться.
🟠Понимание утечек памяти
Если объект имеет циклические ссылки (например, список ссылается сам на себя), Python не может освободить его сразу, поэтому дополнительно используется сборщик мусора (Garbage Collector, GC).
import gc
class Node:
def __init__(self):
self.ref = self # Циклическая ссылка!
n = Node()
del n # Обычный подсчёт ссылок не сработает, объект останется в памяти
gc.collect() # Явный вызов сборщика мусора удалит его
Ставь 👍 и забирай 📚 Базу знаний
🤔 Что известно о request и response?
Это ключевые понятия в веб-связи:
- Request (запрос) — отправляется клиентом. Содержит:
- Метод (GET, POST и др.)
- URL
- Заголовки
- Тело (если есть)
- Response (ответ) — возвращается сервером. Содержит:
- Статус-код (например, 200, 404, 500)
- Заголовки
- Тело ответа (например, HTML, JSON)
Они образуют цикл общения между клиентом и сервером.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Это ключевые понятия в веб-связи:
- Request (запрос) — отправляется клиентом. Содержит:
- Метод (GET, POST и др.)
- URL
- Заголовки
- Тело (если есть)
- Response (ответ) — возвращается сервером. Содержит:
- Статус-код (например, 200, 404, 500)
- Заголовки
- Тело ответа (например, HTML, JSON)
Они образуют цикл общения между клиентом и сервером.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍1💊1
🤔 Какие объекты можно положить в множество?
В Python множество (
🚩Можно добавить в `set`:
Числа (
Строки (
Кортежи (
Булевые значения (
🚩Нельзя добавить в `set`
Изменяемые объекты (
Кортежи с изменяемыми элементами
Ставь 👍 и забирай 📚 Базу знаний
В Python множество (
set) — это неупорядоченная коллекция уникальных элементов, которая работает на основе хеш-таблицы. Это значит, что только хешируемые (immutable) объекты могут быть добавлены в set.🚩Можно добавить в `set`:
Числа (
int, float, complex) s = {1, 2.5, 3+4j}Строки (
str) s = {"apple", "banana", "cherry"}Кортежи (
tuple), если они тоже содержат только неизменяемые объекты s = {(1, 2), ("a", "b")}Булевые значения (
bool)** (но True считается 1, а False — 0) s = {True, False, 1, 0}
print(s) # {False, True} (0 и 1 не добавятся повторно)🚩Нельзя добавить в `set`
Изменяемые объекты (
list, set, dict) s = { [1, 2, 3] } # Ошибка: TypeError: unhashable type: 'list' s = { {"key": "value"} } # Ошибка: TypeError: unhashable type: 'dict'Кортежи с изменяемыми элементами
s = { (1, [2, 3]) } # Ошибка: TypeErrorСтавь 👍 и забирай 📚 Базу знаний
🤔 Что такое многопоточность/многопроцессорность?
- Многопоточность в Python — это одновременное выполнение нескольких "нитей" (потоков) в рамках одного процесса. Используется модуль threading. Однако из-за GIL (Global Interpreter Lock) только один поток исполняет байт-код в один момент времени, что ограничивает пользу многопоточности для вычислений. Подходит для I/O-задач (работа с сетью, файлами).
- Многопроцессорность — это запуск нескольких процессов, каждый со своей памятью и интерпретатором. Используется модуль multiprocessing. Эффективна при вычислениях, так как GIL не мешает разным процессам работать параллельно на многоядерных CPU.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
- Многопоточность в Python — это одновременное выполнение нескольких "нитей" (потоков) в рамках одного процесса. Используется модуль threading. Однако из-за GIL (Global Interpreter Lock) только один поток исполняет байт-код в один момент времени, что ограничивает пользу многопоточности для вычислений. Подходит для I/O-задач (работа с сетью, файлами).
- Многопроцессорность — это запуск нескольких процессов, каждый со своей памятью и интерпретатором. Используется модуль multiprocessing. Эффективна при вычислениях, так как GIL не мешает разным процессам работать параллельно на многоядерных CPU.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍1