Pytania otagowane jako python-internals

Jak działa Python pod maską? Stosuj w przypadku pytań dotyczących (na przykład) podjętych decyzji projektowych oraz wewnętrznych struktur danych i zastosowanych algorytmów.

4
Dlaczego tablice Pythona są wolne?
Spodziewałem array.arraysię, że będę szybszy niż listy, ponieważ tablice wydają się być rozpakowane. Jednak otrzymuję następujący wynik: 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 …





3
Dlaczego iteracja po małym łańcuchu jest wolniejsza niż po małej liście?
Bawiłem się czasem i zauważyłem, że wykonanie prostego rozumienia listy na małym łańcuchu trwało dłużej niż wykonanie tej samej operacji na liście małych ciągów pojedynczych znaków. Jakieś wyjaśnienie? To prawie 1,35 razy więcej czasu. >>> from timeit import timeit >>> timeit("[x for x in 'abc']") 2.0691067844831528 >>> timeit("[x for x …

1
Dlaczego str.translate jest znacznie szybsze w Pythonie 3.5 w porównaniu z Pythonem 3.4?
Próbowałem usunąć niechciane znaki z danego ciągu używając text.translate()w Pythonie 3.4. Minimalny kod to: import sys s = 'abcde12345@#@$#%$' mapper = dict.fromkeys(i for i in range(sys.maxunicode) if chr(i) in '@#$') print(s.translate(mapper)) Działa zgodnie z oczekiwaniami. Jednak ten sam program wykonywany w Pythonie 3.4 i Pythonie 3.5 daje dużą różnicę. Kod …




7
Jak zastąpić operacje kopiowania / głębokiego kopiowania dla obiektu Pythona?
Rozumiem różnicę między copya deepcopyw module kopiowania. Używałem copy.copyi copy.deepcopywcześniej z powodzeniem, ale to jest pierwszy raz, kiedy faktycznie przeładowałem metody __copy__i __deepcopy__. Już Googled się i spojrzał przez wbudowany w modułach Pythona szukać wystąpień __copy__i __deepcopy__funkcji (np sets.py, decimal.pyi fractions.py), ale nadal nie jestem w 100% pewien, że mam …

4
Kiedy hash (n) == n w Pythonie?
Bawiłem się funkcją skrótu Pythona . W przypadku małych liczb całkowitych pojawia się hash(n) == nzawsze. Jednak nie dotyczy to dużych liczb: >>> hash(2**100) == 2**100 False Nie dziwię się, rozumiem, że hash przyjmuje skończony zakres wartości. Co to za zasięg? Próbowałem użyć wyszukiwania binarnego, aby znaleźć najmniejszą liczbęhash(n) != …

1
Dlaczego tuple (set ([1, „a”, „b”, „c”, „z”, „f”])) == tuple (set ([„a”, „b”, „c”, „Z”, „f”, 1])) w 85% przypadków z włączoną randomizacją hash?
Biorąc pod uwagę odpowiedź Zero Piraeus na inne pytanie , mamy to x = tuple(set([1, "a", "b", "c", "z", "f"])) y = tuple(set(["a", "b", "c", "z", "f", 1])) print(x == y) Drukuje Trueokoło 85% czasu z włączoną losowością mieszania . Dlaczego 85%?

3
Dlaczego max działa wolniej niż sort?
Odkryłem, że maxjest wolniejszy niż sortfunkcja w Pythonie 2 i 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
Kiedy pliki .pyc są odświeżane?
Rozumiem, że pliki „.pyc” to skompilowane wersje zwykłych plików „.py”, tworzone w czasie wykonywania, aby programy działały szybciej. Zauważyłem jednak kilka rzeczy: Po modyfikacji plików „py” zachowanie programu zmienia się. Oznacza to, że pliki „py” są kompilowane lub przynajmniej przechodzą przez jakiś proces haszowania lub porównują znaczniki czasu w celu …

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.