Mel jsem kdysi skript, ve kterem byly dlouhodobe v RAM tak velke slovniky, ze bylo potreba, aby sdilely pamet pro uchovani svych immutable klicu!
A to i kdyz ty klice byly ciselne. Pouzil jsem pro to adaptovany http://code.activestate.com/recipes/499299/ Ze se ta technika nazyva internovani, to jsem netusil. A co jsem doted uz vubec netusil je to, ze pro retezce Python nabizi za stejnym ucelem built-in intern() V Python 3 jako sys.intern() CPython provadi nezarucenou internaci taky sam. Dokonce i na necem, co vypada jako vysledek run-time vypoctu, ale neni: >>> x = "aa" >>> y = "a" + "a" >>> x == y, x is y (True, True) >>> dis.dis(compile('x = "aa"', '', 'single')) 1 0 LOAD_CONST 0 ('aa') 3 STORE_NAME 0 (x) ... >>> dis.dis(compile('x = "a" + "a"', '', 'single')) 1 0 LOAD_CONST 2 ('aa') 3 STORE_NAME 0 (x) ... Ale nelze na to spolehat: >>> xx = 'a a' >>> yy = 'a a' >>> xx == yy, xx is yy (True, False) Povidani o poslednim prikadu: http://stackoverflow.com/questions/21203212/python-string-with-space-and-without-space-at-the-end-and-immutability Kdyz se ale spolehnout potrebujeme: >>> xxx = intern('a a') >>> yyy = intern('a a') >>> xxx == yyy, xxx is yyy (True, True) Muze vam to usetrit hordy pameti a znacne zrychlit vykonavani. Za cenu urciteho zpomaleni pri vytvareni retezce. -- : Vladimir Macek : http://macek.sandbox.cz : +420 608 978 164 : UNIX && Dev || Training : Python, Django : PGP key 97330EBD : : PRÁZDNINOVÁ ŠKOLENÍ: http://macek.sandbox.cz/skoleni/aktualni/ _______________________________________________ Python mailing list [email protected] http://www.py.cz/mailman/listinfo/python Visit: http://www.py.cz
