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

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

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

116
Почему 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)) Работает как положено. Однако одна и та же...

106
Оптимизирует ли Python переменную, которая используется только как возвращаемое значение?

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

101
Как переопределить операции копирования / глубокого копирования для объекта Python?

Я понимаю разницу между copyvs. deepcopyв модуле копирования. Я использовал copy.copyи copy.deepcopyпрежде , чем успешно, но это первый раз , когда я на самом деле пошел о перегрузках __copy__и __deepcopy__методы. Я уже Гугл и посмотрел через встроенные в Python модулей , чтобы искать экземпляры...

100
Когда hash (n) == n в Python?

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

97
Почему 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%?...

92
Почему 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,...

92
Когда обновляются файлы .pyc?

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

89
Почему копирование перетасованного списка происходит намного медленнее?

Копирование перемешанного range(10**6)списка десять раз занимает у меня около 0,18 секунды: (это пять запусков) 0.175597017661 0.173731403198 0.178601711594 0.180330912952 0.180811964451 Копирование не перемешанного списка десять раз занимает около 0,05 секунды: 0.058402235973 0.0505464636856...

85
Что с целочисленным кешем, поддерживаемым интерпретатором?

После погружения в исходный код Python я обнаружил, что он поддерживает массив PyInt_Objects в диапазоне от int(-5)до int(256)(@ src / Objects / intobject.c) Небольшой эксперимент это доказывает: >>> a = 1 >>> b = 1 >>> a is b True >>> a = 257 >>> b =...

79
list () использует немного больше памяти, чем понимание списка

Итак, я играл с listобъектами и обнаружил небольшую странную вещь, которая, если listсоздается с list()ее помощью, использует больше памяти, чем понимание списка? Я использую Python 3.5.2 In [1]: import sys In [2]: a = list(range(100)) In [3]: sys.getsizeof(a) Out[3]: 1008 In [4]: b = [i for i in...

62
Почему я получаю столько итераций, когда добавляю и удаляю из набора во время итерации по нему?

Пытаясь понять цикл for Python, я подумал, что это даст результат {1}за одну итерацию или просто застрянет в бесконечном цикле, в зависимости от того, выполняет ли он итерацию, как в C или других языках. Но на самом деле это не так. >>> s = {0} >>> for i in s: ... s.add(i + 1) ......