Вопросы с тегом «python-internals»

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

4
Почему массивы Python медленные?
Я ожидал, array.arrayчто будет быстрее, чем списки, так как массивы кажутся распакованными. Однако я получаю следующий результат: In [1]: import array In [2]: L = list(range(100000000)) In [3]: A = array.array('l', range(100000000)) In [4]: %timeit sum(L) 1 loop, best of 3: 667 ms per loop In [5]: %timeit sum(A) 1 …

6
Почему порядок в словарях и множествах произвольный?
Я не понимаю, как зацикливание словаря или набора в python осуществляется в произвольном порядке. Я имею в виду, что это язык программирования, поэтому все в языке должно быть определено на 100%, верно? У Python должен быть какой-то алгоритм, который решает, какая часть словаря или набора выбрана, 1-я, вторая и так …


4
Можно ли взломать функцию печати Python?
Примечание. Этот вопрос носит исключительно информационный характер. Мне интересно посмотреть, как глубоко во внутренностях Python можно пойти с этим. Не так давно внутри определенного вопроса началось обсуждение того, можно ли изменить строки, переданные в операторы print, после / во время вызова print. Например, рассмотрим функцию: def print_something(): print('This cat was …

3
Что вызывает [* a] перераспределение?
По-видимому list(a), не перераспределяет, [x for x in a]перераспределяет в некоторых точках, и [*a]перераспределяет все время ? Вот размеры n от 0 до 12 и результирующие размеры в байтах для трех методов: 0 56 56 56 1 64 88 88 2 72 88 96 3 80 88 104 4 88 …

3
Почему перебор небольшой строки медленнее, чем перебора небольшого списка?
Я играл с timeit и заметил, что выполнение простого понимания списка для небольшой строки занимает больше времени, чем выполнение той же операции со списком небольших односимвольных строк. Любое объяснение? Это почти в 1,35 раза больше времени. >>> from timeit import timeit >>> timeit("[x for x in 'abc']") 2.0691067844831528 >>> timeit("[x …

1
Почему str.translate намного быстрее в Python 3.5 по сравнению с Python 3.4?
Я пытался удалить ненужные символы из заданной строки, используя text.translate()Python 3.4. Минимальный код: import sys s = 'abcde12345@#@$#%$' mapper = dict.fromkeys(i for i in range(sys.maxunicode) if chr(i) in '@#$') print(s.translate(mapper)) Работает как положено. Однако одна и та же программа при выполнении в Python 3.4 и Python 3.5 дает большую разницу. …

2
Оптимизирует ли Python переменную, которая используется только как возвращаемое значение?
Есть ли разница между двумя следующими фрагментами кода? Первый присваивает значение переменной в функции, а затем возвращает эту переменную. Вторая функция просто возвращает значение напрямую. Превращает ли Python их в эквивалентный байт-код? Один из них быстрее? Случай 1 : def func(): a = 42 return a Случай 2 : def …

4
Почему кортежи занимают меньше места в памяти, чем списки?
A tupleзанимает меньше места в памяти в Python: >>> a = (1,2,3) >>> a.__sizeof__() 48 тогда как lists занимает больше места в памяти: >>> b = [1,2,3] >>> b.__sizeof__() 64 Что происходит внутри управления памятью Python?


7
Как переопределить операции копирования / глубокого копирования для объекта Python?
Я понимаю разницу между copyvs. deepcopyв модуле копирования. Я использовал copy.copyи copy.deepcopyпрежде , чем успешно, но это первый раз , когда я на самом деле пошел о перегрузках __copy__и __deepcopy__методы. Я уже Гугл и посмотрел через встроенные в Python модулей , чтобы искать экземпляры __copy__и __deepcopy__функции (например sets.py, decimal.py, иfractions.py …

4
Когда hash (n) == n в Python?
Я играл с хеш-функцией Python . Для маленьких целых чисел он появляется hash(n) == nвсегда. Однако это не распространяется на большие числа: >>> hash(2**100) == 2**100 False Я не удивлен, я понимаю, что хеш принимает конечный диапазон значений. Что это за диапазон? Я пробовал использовать двоичный поиск, чтобы найти наименьшее …

1
Почему tuple (set ([1, «a», «b», «c», «z», «f»])) == tuple (set ([«a», «b», «c», «Z», «f», 1])) 85% времени с включенной рандомизацией хэша?
Учитывая ответ Нуля Пирея на другой вопрос , мы имеем x = tuple(set([1, "a", "b", "c", "z", "f"])) y = tuple(set(["a", "b", "c", "z", "f", 1])) print(x == y) Печатает Trueпримерно 85% времени с включенной случайностью хеширования . Почему 85%?

3
Почему max медленнее, чем sort?
Я обнаружил, что maxэто медленнее, чем sortфункция в Python 2 и 3. Python 2 $ python -m timeit -s 'import random;a=range(10000);random.shuffle(a)' 'a.sort();a[-1]' 1000 loops, best of 3: 239 usec per loop $ python -m timeit -s 'import random;a=range(10000);random.shuffle(a)' 'max(a)' 1000 loops, best of 3: 342 usec per loop Python 3 …

2
Когда обновляются файлы .pyc?
Я понимаю, что файлы «.pyc» представляют собой скомпилированные версии файлов «.py» в виде обычного текста, созданные во время выполнения, чтобы программы работали быстрее. Однако я заметил несколько вещей: При модификации файлов "py" поведение программы меняется. Это указывает на то, что файлы "py" скомпилированы или, по крайней мере, проходят какой-то процесс …

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.