python-internals

"kolejność" nieuporządkowanych zestawów Pythona

Rozumiem, że zestawy w Pythonie nie są uporządkowane, ale jestem ciekaw "kolejności", w jakiej są wyświetlane, ponieważ wydaj ... 'b', 'c', 'd']) >>>> set_4 set(['a', 'r', 'b', 'c', 'd']) Jestem ciekawa, dlaczego tak się stało. Jakaś pomoc?

Jak odwołania do zmiennych są rozwiązywane w Pythonie

Ta wiadomość jest trochę długa z wieloma przykładami, ale mam nadzieję, że pomoże mi i innym lepiej zrozumieć pełną historię ... () f2() >>> x in myfunc Dlaczego w w tym przypadku odniesienie x w MyClass jest sprawdzane w najskrytsza funkcja?

O zmianie id niezmiennego łańcucha

Coś o id obiektach typu str (w Pythonie 2.7) mnie zastanawia. Typ str jest niezmienny, więc spodziewałbym się, że po jego utw ... o') 139978087896384 >>> id('hello') 139978087896384 >>> id('hello') 139978087896384 Teraz jest równe...

Poprawa wydajności bardzo dużego słownika w Pythonie

Stwierdzam, że jeśli zainicjalizuję pusty słownik na początku, a następnie dodam elementy do słownika w pętli for (około 110 ... ? Pamiętam, że jeśli znasz klucze, możesz mądrze zaprojektować funkcję hash (perfect hash?) i przeznaczyć wcześniej miejsce.

Dlaczego tuple (set ([1,"a","b","c","z","f"])) == tuple (set (["a","b","c","z","f",1])) 85% czasu z włączoną randomizacją skrótu?

Biorąc pod uwagę Zero odpowiedzi Pireusa 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 True około 85% czasu z włączoną randomizacją skrótu . Dlaczego 85%?

Dlaczego kopiowanie tasowanej listy jest znacznie wolniejsze?

Kopiowanie tasowanej listy 10 razy zajmuje mi około 0,18 sekundy: (to jest 5 runów) 0.175597017661 0.173731403198 0.1786017 ... ego: a = list(range(10**6)) random.shuffle(a) a = list(a) for _ in range(5): print(timeit(lambda: list(a), number=10))

list() wykorzystuje więcej pamięci niż zrozumienie listy

Więc bawiłem się list obiektami i znalazłem małą dziwną rzecz, że jeśli list jest tworzony z list() to zużywa więcej pamięci, ... ;> import sys >>> sys.getsizeof(list(xrange(100))) 1016 >>> sys.getsizeof([i for i in xrange(100)]) 920

Jaki jest właściwy sposób nadpisania operacji kopiowania / deepcopy na obiekcie w Pythonie?

Więc tak dla ustalenia, czuję, że rozumiem różnicę między copy vs. deepcopy w module kopiowania i używałem copy.copy i copy.d ... ekcie w celu zapewnienia copy.copy i copy.deepcopy odpowiedniego zachowania? Obecnie używam Pythona 2.6.2. Z góry dzięki!

Co powoduje, że [*a] nadmierny przydział?

Najwyraźniej list(a) nie nadalokuje, [x for x in a] nadalokuje w niektórych punktach, a [*a] nadalokuje cały czas? Tutaj ... ódłowy? (Colab z danymi i kodem , które tworzyły obrazy.) Powiększenie do mniejszego n: Powiększenie do większego n:

Dlaczego kod używając zmiennych pośrednich jest szybszy niż kod bez?

Spotkałam się z tym dziwnym zachowaniem i nie udało mi się tego wyjaśnić. Są to benchmarki: py -3 -m timeit "tuple(range(20 ... Pythona z pętlami timeit.timeit() @ 10000 dało odpowiednio 0.703 i 0.804. Nadal pokazuje, choć w mniejszym stopniu. (~12.5%)

Jak wymiana członków w krotkach Pythona (a,b)=(b,a) działa wewnętrznie?

In [55]: a = 5 In [56]: b = 6 In [57]: (a, b) = (b, a) In [58]: a Out[58]: 6 In [59]: b Out[59]: 5 Jak to zamiana wartości a i b działa wewnętrznie? Zdecydowanie nie używa zmiennej temp.

list() wykorzystuje nieco więcej pamięci niż zrozumienie listy

Więc bawiłem się list obiektami i znalazłem małą dziwną rzecz, że jeśli list jest tworzony z list() to zużywa więcej pamięci, ... ;> import sys >>> sys.getsizeof(list(xrange(100))) 1016 >>> sys.getsizeof([i for i in xrange(100)]) 920

Kiedy jest hash (n) == N w Pythonie?

Grałem w Pythona funkcja hash . Dla małych liczb całkowitych pojawia się hash(n) == n zawsze. Nie dotyczy to jednak dużych li ... , wydaje się, że hash Pythona 3 jest zawsze pozytywnie wyceniany, podczas gdy Hash Pythona 2 może przyjmować wartości ujemne.

operator 'is' zachowuje się nieoczekiwanie z nie buforowanymi liczbami całkowitymi

Podczas zabawy z interpreterem Pythona natknąłem się na ten sprzeczny przypadek dotyczący is operatora: Jeśli ocena odbywa ... owitymi. This isn ' t the case tutaj ponieważ liczby są poza tym przedziałem i chcę ocenić tożsamość i , a nie równość.

Dlaczego krotki zajmują mniej miejsca w pamięci niż listy?

A tuple zajmuje mniej miejsca w Pythonie: >>> a = (1,2,3) >>> a.__sizeof__() 48 Podczas gdy list S zajm ... mięci: >>> b = [1,2,3] >>> b.__sizeof__() 64 Co dzieje się wewnętrznie w zarządzaniu pamięcią Pythona?

Dlaczego w Pythonie są odwrócone i sortowane różne typy?

reversed'typ s to "typ": {]} >>> type(reversed) <class 'type'> sorted'typ s to" wbudowana funkcja lub meto ... c oczywistą różnicę w funkcjonalności (odwracanie vs. sortowanie sekwencji), jaka jest przyczyna tej różnicy w implementacji?

Python: dlaczego * i * * są szybsze niż / i sqrt()?

Podczas optymalizacji kodu zrozumiałem co następuje: >>> from timeit import Timer as T >>> T(lambda : 123 ... m, że ma to związek ze sposobem implementacji Pythona w C, ale zastanawiam się, czy ktoś chciałby wyjaśnić dlaczego tak jest?

Dlaczego rozmiar tego łańcucha Pythona zmienia się po nieudanej konwersji int

From the tweet here : import sys x = 'ñ' print(sys.getsizeof(x)) int(x) #throws an error print(sys.getsizeof(x)) Otrzymuj ... ñ' y = 'ñ' int(x) print(sys.getsizeof(y)) 77! print(sys.getsizeof('ñ')) int('ñ') print(sys.getsizeof('ñ')) 74, potem 77.

Dlaczego zmienna1 + = zmienna2 jest znacznie szybsza niż zmienna1 = zmienna1 + zmienna2?

Odziedziczyłem Kod Pythona, który służy do tworzenia ogromnych tabel (do 19 kolumn szerokości 5000 wierszy). Narysowanie tabe ... Ale dlaczego była taka duża różnica? A dlaczego kompilator nie zauważył problemu w pierwszej wersji i nie zoptymalizował go?

Co dokładnie zawiera obj. zakończenie?

Beazley pg 100 wspomina: >>>python.__closure__ (<cell at 0x67f50: str object at 0x69230>,) >>>pytho ... ell_contents Rozumiem, że __closure__ to lista, ale co to wszystko cell stuff I str object?? To wygląda jak 1-arowa krotka?