Python_BE1
9 subscribers
748 photos
252 videos
7 files
672 links
Канал по Python, полезный и интересный контент для всех уровней.
По вопросам сотрудничества @cyberJohnny
Download Telegram
🐍 Почему Python `deepcopy()` такой медленный и что использовать вместо

Функция `copy.deepcopy()` кажется удобной: она создаёт полную копию объекта со всеми вложенными структурами. Но на практике она часто оказывается очень медленной и становится бутылочным горлышком в проектах. Давайте разберёмся почему так происходит и какие есть альтернативы.

🔥 Почему `deepcopy()` тормозит
1. Рекурсия на всём дереве объектов
Python проходит по каждому вложенному элементу, даже если их сотни тысяч.

2. Определение метода копирования
Для каждого объекта проверяется, можно ли вызвать `__deepcopy__`, или приходится идти стандартным путём.

3. Memo-словарь для ссылок
Чтобы избежать бесконечных циклов при копировании (например, объект ссылается сам на себя), Python ведёт словарь уже скопированных элементов. Это полезно, но замедляет работу.

4. Реализация на чистом Python
В отличие от сериализации (`pickle`), `deepcopy()` не ускорена на уровне C, поэтому работает медленнее.

📊 Пример замеров скорости
```

import copy, pickle, time

data = [[i for i in range(1000)] for _ in range(1000)]

# deepcopy
start = time.time()
a = copy.deepcopy(data)
print("deepcopy:", time.time() - start)

```
```

# pickle
start = time.time()
b = pickle.loads(pickle.dumps(data))
print("pickle roundtrip:", time.time() - start)

```

```python
# list comprehension (для списков списков)
start = time.time()
c = [sub[ for sub in data]
print("manual copy:", time.time() - start)
````
`
💻 Результат (у вас может отличаться, но смысл тот же):

- d`eepcopy:` ~2.5 сек
- p`ickle:` ~0.8 сек
- р`учное копирование:` ~0.02 сек (!)

Когда что использовать

copy.deepcopy()
Подходит, если структура очень сложная, а вам нужна стопроцентно независимая копия.

pickle.loads(pickle.dumps(obj))
Быстрее на больших структурах, плюс удобно, если данные нужно сохранять.

json.loads(json.dumps(obj))
Хорошо для простых словарей и списков с базовыми типами.

Ручное копирование (list comprehension, dict comprehension)
Лучший вариант, если вы знаете структуру данных и хотите максимум скорости.

📌 Итог
d`eepcopy() `— это универсальный инструмент, но он платит за универсальность скоростью.
Если важна производительность — используйте сериализацию или ручные методы копирования, они могут быть в десятки и сотни раз быстрее.

Ставь 🔥, сохраняй себе в копилку Python-трюков, чтобы не забыть 😉

@python_be1
Chatgpt- гений

@python_be1
🎙️ NVIDIA выпустили Canary-1B v2 — открытую модель для распознавания и перевода речи, которая работает с 25 европейскими языками.

Что она умеет:
- 📝 Точное ASR (распознавание речи) и AST (перевод речи) между английским и 24 другими языками.
- Автоматическая пунктуация, капитализация и точные таймстампы до слова.
- Поддержка русского, французского, немецкого, испанского и многих других языков.

Чем интересна
- До 10× быстрее инференс, чем у моделей в 3 раза больше.
- Уже показывает state-of-the-art точность среди открытых моделей на Hugging Face.
- Лицензия CC-BY-4.0 — можно свободно использовать в проектах.

Под капотом:
- Архитектура: FastConformer-энкодер + Transformer-декодер (~978M параметров).
- Форматы: `.wav` и `.flac`, моно 16 кГц.
- Легко интегрируется через NVIDIA NeMo или прямо с Hugging Face.

Где пригодится:
🟢 голосовые ассистенты
🟢 субтитры и перевод видео
🟢 чат-боты с речевым вводом
🟢 real-time анализ речи

Всего ~978M параметров → легче, быстрее и дешевле в использовании, чем большие модели конкурентов.

🟠 Попробовать можно здесь: https://huggingface.co/nvidia/canary-1b-v2
🟠SET: https://huggingface.co/datasets/nvidia/Granary
🟠PARAKEET: https://huggingface.co/nvidia/parakeet-tdt-0.6b-v3

#AI #NVIDIA #SpeechRecognition #ASR #AST #Multilingual #MachineLearning #DeepLearning

@python_be1
Realtime Voice Chat (https://github.com/KoljaB/RealtimeVoiceChat) — пообщайтесь с искусственным интеллектом в естественной разговорной манере!

Этот проект позволяет вам общаться с большой языковой моделью (LLM), используя только свой голос и получая устные ответы практически в режиме реального времени.

@python_be1
🌱 Что помещается в переменную num?

@python_be1
⚡️ DeepCode — открытая AI-платформу для автоматической генерации кода.

DeepCode превращает научные статьи и технические документы в готовые проекты, включая фронтенд, бэкенд и полноценные репозитории.

🔹 Основные возможности:
• Paper2Code — реализация идей из исследований в рабочий код
• Text2Web — генерация интерфейсов по описанию
• Text2Backend — автоматическое создание масштабируемых серверов
• Поддержка длинных документов и многофайловых проектов

🔜 В ближайшее время разработчики обещают:
• Автоматическую проверку и валидацию кода
• Повышение скорости генерации
• Улучшенную работу с требованиями
• Бенчмарки воспроизведения научных статей (PaperBench)

Проект полностью open source: https://github.com/HKUDS/DeepCode

#deepcode #AI #coding

@python_be1
This media is not supported in your browser
VIEW IN TELEGRAM
Откопал годноту для кодеров — CodeViz (https://marketplace.visualstudio.com/items?itemName=CodeViz.codeviz)

Это расширение для VS Code, которое помогает визуализировать кодовую базу, создавая интерактивные карты от общей архитектуры до детальных вызовов функций

К тому же, можно задавать вопросы на естественном языке и получать наглядные диаграммы, связанные напрямую с кодом

Поддерживается множество языков программирования, базовые функции бесплатны, а продвинутые доступны по подписке ✌️

@python_be1
🐍 Изучаем MCP на Python — серия уроков от Microsoft

Пошаговое руководство для Python-разработчиков по Model Context Protocol (MCP):
как понять концепцию и построить свой MCP-сервер в интерактивном формате.

📚Репозиторий с гайдом (https://github.com/microsoft/lets-learn-mcp-python)

#python #MCP #tutorial #developers

@python_be1
GPU Memory Calculator.

Полезный калькулятор GPU, который подскажет, сможете ли вы запустить локальную LLM и насколько эффективно она будет работать

https://calculator.inference.ai/

@python_be1
🔋 PikaPython — ультралегкий интерпретатор Python для микроконтроллеров. Проект позволяет запускать Python-код на устройствах с 4 КБ RAM и 64 КБ Flash. Не требует операционной системы и работает через REPL по UART.

Инструмент имеет встроенный прекомпилятор для автоматической генерации биндингов C-функций из .pyi файлов. Есть готовые BSP для популярных MCU и демо-проекты.

🤖 GitHub (https://github.com/pikasTech/PikaPython)

@python_be1
⚡️Qoder — бесплатный ИИ-редактор кода от Alibaba

Разработчики называют (https://x.com/qoder_ai_ide/status/1958541347906023710?s=46) его платформой для кодинга «нового поколения». Qoder понимает всю кодовую базу, разбивает задачу на шаги, запоминает твой стиль и самое классное — модель подбирается автоматически в зависимости от задачи.

Есть еще Quest Mode: описываешь задачу, а Qoder сам пишет спецификацию, планирует и выполняет изменения по коду.

https://qoder.com/

@python_be1
This media is not supported in your browser
VIEW IN TELEGRAM
🔥 Walrus оператор := — присвоение прямо в выражении

В Python есть малоизвестная фишка: можно использовать оператор присваивания := (его ещё называют «walrus»). Он позволяет присваивать значение прямо внутри выражения. Это делает код короче и избавляет от повторных вызовов функций.

📌 Особенности:
• Работает в while, if, list comprehension.
• Удобен для сокращения кода и избежания дублирования.
• Но злоупотребление может сделать код менее читаемым.

🟢Пример: удобно при чтении строк из файла или работе с регулярными выражениями.

@python_be1
🚀 Фишка на Python: Скачивание нескольких файлов параллельно с помощью `ThreadPoolExecutor`

Этот скрипт использует `urllib.request` + `concurrent.futures`, чтобы загружать файлы одновременно и значительно ускорить процесс.

```

import os
import urllib.request

from concurrent.futures import ThreadPoolExecutor, as_completed

def downloader(url):
"""Скачивает указанный URL и сохраняет его на диск"""
req = urllib.request.urlopen(url)
filename = os.path.basename(url)
ext = os.path.splitext(url)[1]
if not ext:
raise RuntimeError('URL не содержит расширения')

with open(filename, 'wb') as file_handle:
while True:
chunk = req.read(1024)
if not chunk:
break
file_handle.write(chunk)

return f'Загрузка завершена: {filename}'

def main(urls):
"""Создаёт пул потоков и скачивает указанные файлы"""
with ThreadPoolExecutor(max_workers=5) as executor:
futures = [executor.submit(downloader, url) for url in urls]
for future in as_completed(futures):
print(future.result())

if __name__ == '__main__':
urls = [
"http://www.irs.gov/pub/irs-pdf/f1040.pdf",
"http://www.irs.gov/pub/irs-pdf/f1040a.pdf",
"http://www.irs.gov/pub/irs-pdf/f1040ez.pdf",
"http://www.irs.gov/pub/irs-pdf/f1040es.pdf",
"http://www.irs.gov/pub/irs-pdf/f1040sb.pdf"
]
main(urls)
```

@python_be1
This media is not supported in your browser
VIEW IN TELEGRAM
🔥 Python cовет: если у тебя много однотипных объектов, используй slots. В обычном классе атрибуты хранятся в dict, а со slots — в компактном массиве. Это экономит память и ускоряет доступ к данным.

Минус — нельзя динамически добавлять новые поля. Но для моделей и DTO — это идеальный вариант.

Ставь лайк и подпишись на нас, каждый день мы публикуем полезные и не банальные советы для разработчиков

@python_be1