и посмотреть медиа
Code on a Napkin - Python coding
и посмотреть медиа
Channel about programming in Python and other languages. Simple explanations and codes.
Channel about programming in Python and other languages. Simple explanations and codes.
AI bot for text-to-speech and voice cloning in Telegram. Create audio using neural network quickly and easily.
Resource for those interested in programming. Focus on Python, but covers other topics as well. Simple examples and breakdowns.
Знаете ли вы, что [[]] * 3 в Python – это три ссылки на один список, а не три списка? Удобный способ создать матрицу нулей [[0] * 3] * 3 оборачивается ловушкой: одно изменение элемента меняет сразу все строки. Причина в том, что * на последовательности повторяет ссылки, а не копирует объекты. Внутренний список создается один раз, а внешнее умножение дает три ссылки на него. Классика – матрица 3×3: matrix = [[0] * 3] * 3 matrix[0][0] = 1 print(matrix) # [[1, 0, 0], [1, 0, 0], [1, 0, 0]] – здесь изменились все строки matrix[0], matrix[1] и matrix[2] – один и тот же объект. Запись в любой из рядов видна через остальные, потому что ряд по сути один. Проверить это можно через id(): rows = [[]] * 3 print(id(rows[0]) == id(rows[1]) == id(rows[2])) # True rows[0].append("a") print(rows) # [['a'], ['a'], ['a']] – один список под тремя именами Все три элемента указывают на один и тот же пустой список. append на любом из них дописывает в этот единственный список, и изменение видно через все остальные ссылки. Правильный способ – list comprehension, который создает новый объект на каждой итерации: matrix = [[0] * 3 for _ in range(3)] matrix[0][0] = 1 print(matrix) # [[1, 0, 0], [0, 0, 0], [0, 0, 0]] – так изменилась только первая строка Внутреннее [0] * 3 тоже умножение, но там оно безопасно: нули неизменяемы, и наличие тысячи ссылок на один и тот же 0 ничего не ломает. Проблема возникает только когда * повторяет ссылку на изменяемый объект – список, словарь, set. * на последовательности экономит память, повторяя ссылки. Для неизменяемых элементов это незаметно, для изменяемых – ломает изоляцию между "копиями". Вложенные структуры безопаснее создавать через list comprehension. В следующий вторник – + и reflected operators: как Python решает чей метод звать, когда складываются объекты разных типов, и при чем тут __radd__. Код на салфетке x Кусочки кода
Открыть канал и посмотреть медиаOnly registered users can share their opinion.
Be the first to share your impression of this resource!