Описание тега python-internals

Как Python работает под капотом? Используйте для вопросов, касающихся (например) принятых проектных решений и используемых внутренних структур данных и алгоритмов.
1 ответ

Когда мусор CPython собирает?

Если я правильно понимаю, в CPython объекты будут удалены, как только их число ссылок достигнет нуля. Если у вас есть циклы ссылок, которые становятся недоступными, то логика не будет работать, но иногда интерпретатор попытается найти их и удалить и…
2 ответа

Размер объекта генератора в питоне

Для следующего кода: import sys x=(i for i in range(1,11)) print x print 'Before starting iterating generator size is' ,sys.getsizeof(x) print 'For first time' for i in x: print i print 'For second time , does not print anything' for i in x: print i…
06 янв '15 в 07:49
4 ответа

Различный размер объекта True и False в Python 3

Экспериментируя с магическими методами (__sizeof__ в частности) на разных объектах Python я наткнулся на следующее поведение: Python 2.7 >>> False.__sizeof__() 24 >>> True.__sizeof__() 24 Python 3.x >>> False.__sizeof__() …
1 ответ

Python не ищет пространство имен местных жителей

Я пытаюсь импортировать функцию из другого модуля; однако я не могу использовать import потому что имя модуля нужно искать в списке. Если я попытаюсь вызвать импортированную функцию ExampleFunc обычно я получаю: NameError: global name 'ExampleFunc' …
27 янв '15 в 18:43
1 ответ

Как Python внутренне различает "от модуля импорта пакета" между "от функции импорта модуля"

Если я правильно понимаю, синтаксис Python from ... import ... можно использовать двумя способами из имени пакета имя модуля импорта из имени модуля импортировать имя-функции Я хотел бы немного узнать, как Python внутренне обрабатывает две разные фо…
26 мар '18 в 12:36
3 ответа

Почему python не использует __iadd__ для операторов суммирования и цепочки?

Я только что провёл интересный тест: ~$ python3 # I also conducted this on python 2.7.6, with the same result Python 3.4.0 (default, Apr 11 2014, 13:05:11) [GCC 4.8.2] on linux Type "help", "copyright", "credits" or "license" for more information. &…
25 июн '15 в 15:18
4 ответа

Почему кортежи занимают меньше места в памяти, чем списки?

tuple занимает меньше памяти в Python: >>> a = (1,2,3) >>> a.__sizeof__() 48 в то время как lists занимает больше места в памяти: >>> b = [1,2,3] >>> b.__sizeof__() 64 Что происходит внутри системы управления памя…
10 окт '17 в 10:04
4 ответа

Каков механизм, позволяющий исправлениям Python Monkey в этом случае?

Может кто-нибудь объяснить логику, как это работает с интерпретатором Python? Является ли это поведение только локальным потоком? Почему назначение при импорте первого модуля сохраняется после импорта второго модуля? У меня просто была долгая сессия…
1 ответ

Безопасное использование метода удаления в Python

Я унаследовал класс UserList из списка и реализовал следующий метод для удаления записей, помеченных как удаленные def purge_deleted(self): for element in list.__iter__(self): if ele.mark_deleted < 1: self.remove(element) элемент сам по себе явля…
03 апр '14 в 13:22
5 ответов

Об изменении идентификатора неизменной строки

Что-то о id объектов типа str (в Python 2.7) озадачивает меня. str type является неизменным, поэтому я ожидаю, что после его создания он всегда будет одинаковым id, Мне кажется, я не очень хорошо выражаю свои слова, поэтому вместо этого я опубликую …
1 ответ

Почему есть разные результаты для getizeof между list() и []

Во время работы я заметил странную вещь: from sys import getsizeof as gs list1=[1] list2=list([1]) list1==list2 #true gs(list1) #80. (I guess 72 overhead +8 of the int) gs(list2) #104. (I guess 72 + 8 as above + 24 of...?) list3=[1,2,3,4,5] list4=li…
21 фев '19 в 13:08
1 ответ

Почему __code__ для функции (Python) изменчив

В предыдущем вопросе вчера, в комментариях, я узнал, что в Python __code__ атрибут функции является изменяемым. Следовательно, я могу написать код следующим образом def foo(): print "Hello" def foo2(): print "Hello 2" foo() foo.__code__ = foo2.__cod…
23 июл '15 в 22:50
1 ответ

Как найти реализацию [::-1] (список обращений в Python) в исходном коде CPython

Я пытался перевернуть список в Python. Есть много методов там и [::-1] кажется отличным! Но мне любопытно, как [::-1] готово? Какова временная сложность этого? Я искал репозиторий CPython в github, но не смог найти никакой подсказки. Моя стратегия п…
12 сен '18 в 11:45
1 ответ

В чем разница между исходными кодами Python3.5 и Python3.6?

testing on ../../test/test_patm.py python: Python/compile.c:4420: int assemble_lnotab(struct assembler *, struct instr *): Assertion `d_lineno >= 0' failed. Aborted При запуске моих тестовых программ я получил ошибку, как указано выше. Наконец, …
29 авг '17 в 09:29
2 ответа

Каковы эти дополнительные символы в symtable понимания?

Я использую symtable чтобы получить таблицы символов фрагмента кода. Любопытно, что при использовании понимания (listcomp, setcomp и т. Д.), Есть некоторые дополнительные символы, которые я не определил. Воспроизведение (с использованием CPython 3.6…
2 ответа

Разница между загруженным модулем и инициализированным модулем?

В справочном руководстве указано, что: Полная программа Python выполняется в минимально инициализированной среде: все встроенные и стандартные модули доступны, но ни один не был инициализирован, кроме sys (различные системные сервисы), builtins (вст…
25 июл '17 в 18:42
1 ответ

Подклассы из объекта - это то же самое, что и определение типа как метакласса?

Это класс в старом стиле: class OldStyle: pass Это класс в новом стиле: class NewStyle(object): pass Это также новый класс: class NewStyle2: __metaclass__ = type Есть ли какая-либо разница между NewStyle а также NewStyle2? У меня сложилось впечатлен…
4 ответа

Почему медленнее перебирать маленькую строку, чем маленький список?

Я поиграл с timeit и заметил, что простое понимание списка по маленькой строке заняло больше времени, чем выполнение той же операции со списком маленьких односимвольных строк. Любое объяснение? Это почти в 1,35 раза больше времени. >>> from…
1 ответ

Какова продолжительность работы полосы Python ()?

Какова продолжительность работы полосы Python ()? Поскольку remove - это O(n) для одного символа, является ли полоса O(n^2) для строки?
29 дек '14 в 06:49
1 ответ

Как Python делает магию строк?

Сегодня меня смутило сравнение строк: кажется, что python повторно использует строки (что разумно сделать, поскольку они неизменны). Чтобы проверить этот факт, я сделал следующее: >>> a = 'xxx' >>> b = 'xxx' >>> a == b Tru…
05 сен '14 в 04:39