рдкрд╛рдпрдерди рдореЗрдВ рд╢рдмреНрджрдХреЛрд╢ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди

рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░, 30 рдЕрдкреНрд░реИрд▓ рдХреЛ, рдЕрд▓реНрдЧреЛрд░рд┐рджреНрдо рдлреЙрд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛрд░реНрд╕ рдУрдЯреАрдпреВрдПрд╕ рдореЗрдВ рд╢реБрд░реВ рд╣реЛрдЧрд╛, рдФрд░ рдпрд╣реА рд╡рд╣ рд╣реИ рдЬреЛ рдЖрдЬ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рдкреНрд░рдХрд╛рд╢рди рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рд╣реИред рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред



рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдЖрдк рд╕реАрдЦреЗрдВрдЧреЗ рдХрд┐ рдкрд╛рдпрдерди рдореЗрдВ рд╢рдмреНрджрдХреЛрд╢реЛрдВ рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╢рдмреНрджрдХреЛрд╢реЛрдВ рдХреЛ рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдиреБрдХреНрд░рдорд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЖрдЗрдП рд╢рдмреНрджрдХреЛрд╢ рдореЗрдВ 3 рдореБрдЦреНрдп / рдореВрд▓реНрдп рдЬреЛрдбрд╝реЗ рдЬреЛрдбрд╝реЗрдВ:

>>> d = {'a': 1, 'b': 2} >>> d['c'] = 3 >>> d {'a': 1, 'b': 2, 'c': 3} 

рдорд╛рдиреЛрдВ рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдкрд╣реБрдБрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

 >>> d['a'] 1 >>> d['b'] 2 >>> d['c'] 3 >>> d['d'] Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'd' 

рдХреБрдВрдЬреА тАЬdтАЭ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП KeyError рддреНрд░реБрдЯрд┐ рд╣реЛрдЧреАред

рд╣реИрд╢ рдЯреЗрдмрд▓

рдкрд╛рдпрдерди рдореЗрдВ рдбрд┐рдХреНрд╢рдирд░реА рд╣реИрд╢ рдЯреЗрдмрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИрдВред рд╡реЗ рд╕рд░рдгрд┐рдпрд╛рдБ рд╣реИрдВ рдЬрд┐рдирдХреЗ рд╕реВрдЪрдХрд╛рдВрдХ рд╣реИрд╢ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИред рд╣реИрд╢ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд▓рдХреНрд╖реНрдп рд╕рд░рдгреА рдореЗрдВ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЛ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рд╡рд┐рддрд░рд┐рдд рдХрд░рдирд╛ рд╣реИред рдПрдХ рдЕрдЪреНрдЫрд╛ рд╣реИрд╢ рдлрд╝рдВрдХреНрд╢рди рдЯрдХрд░рд╛рд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддред рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рд╡рд┐рднрд┐рдиреНрди рдХреБрдВрдЬреА рдПрдХ рд╣реА рд╣реИрд╢ рд╣реЛрдЧрд╛ред рдкрд╛рдпрдерди рдореЗрдВ рдРрд╕реЗ рдХреЛрдИ рд╣реИрд╢ рдлрдВрдХреНрд╢рди рдирд╣реАрдВ рд╣реИрдВред рдЗрд╕рдХреЗ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрд╢ рдлрд╝рдВрдХреНрд╢рди (рд╕реНрдЯреНрд░рд┐рдВрдЧ рдФрд░ рдкреВрд░реНрдгрд╛рдВрдХ рдорд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП) рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕рдорд╛рди рдорд╛рди рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ:

 >>> map(hash, (0, 1, 2, 3)) [0, 1, 2, 3] >>> map(hash, ("namea", "nameb", "namec", "named")) [-1658398457, -1658398460, -1658398459, -1658398462] 

рд╣рдо рдорд╛рдиреЗрдВрдЧреЗ рдХрд┐ рдЗрд╕ рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рддрдХ рд╣рдо рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░реЗрдВрдЧреЗред рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдкрд╛рдпрдерди рдореЗрдВ рд╣реИрд╢ рдлрд╝рдВрдХреНрд╢рди рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

 arguments: string object returns: hash function string_hash: if hash cached: return it set len to string's length initialize var p pointing to 1st char of string object set x to value pointed by p left shifted by 7 bits while len >= 0: set var x to (1000003 * x) xor value pointed by p increment pointer p set x to x xor length of string object cache x as the hash so we don't need to calculate it again return x as the hash 

рдпрджрд┐ рдЖрдк рдкрд╛рдпрдерди рдореЗрдВ hash('a') рдХреЛ 12416037344 string_hash() , рддреЛ рдпрд╣ string_hash() 12416037344 рдХрд░реЗрдЧрд╛ рдФрд░ 12416037344 рд╡рд╛рдкрд╕ 12416037344 ред рдпрд╣рд╛рдВ рд╣рдо рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ 64-рдмрд┐рдЯ рдорд╢реАрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

рдпрджрд┐ рдорд╛рди / рдХреБрдВрдЬреА рдпреБрдЧреНрдореЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдХрд╛рд░ рдХреА рдПрдХ рд╕рд░рдгреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕рд░рдгреА рдореЗрдВ рд╕реЗрд▓ рдХреЗ рд╕реЗрд▓ рдХреЗ рд╕реВрдЪрдХрд╛рдВрдХ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдореБрдЦреМрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕реЗ -1 рд░реВрдк рдореЗрдВ рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИред рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗрд▓ рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рдХреА рддреНрд╡рд░рд┐рдд рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИред рдЖрдХрд╛рд░ рдмрджрд▓рдиреЗ рд╡рд╛рд▓реЗ рддрдВрддреНрд░ рдХреЗ рдХрд╛рд░рдг рдПрдХ рдЦрд╛рд▓реА рд╕реЗрд▓ рдорд┐рд▓рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХрд╛рдлреА рдЕрдзрд┐рдХ рд╣реИ, рдЬреЛ рдиреАрдЪреЗ рд╡рд░реНрдгрд┐рдд рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЧрдгрдирд╛ рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рд╕рд░рдгреА рдХрд╛ рдЖрдХрд╛рд░ 8 рд╣реИ, 'a' рдХрд╛ рд╕реВрдЪрдХрд╛рдВрдХ рд╣реЛрдЧрд╛: hash('a') & 7 = 0 ред 'b' рд▓рд┐рдП рдЗрдВрдбреЗрдХреНрд╕ 2 рд╣реИ, 'c' рд▓рд┐рдП рдЗрдВрдбреЗрдХреНрд╕ 3 рд╣реИ, 'z' рд▓рд┐рдП рдЗрдВрдбреЗрдХреНрд╕ 3 рд╣реИ, рдЬреИрд╕реЗ 'b' , рдФрд░ рдпрд╣реАрдВ рдкрд░ рд╣рдореЗрдВ рдЯрдХреНрдХрд░ рдорд┐рд▓рддреА рд╣реИред



рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдХрд┐ рдкрд╛рдпрдерди рдХреНрд░рдорд┐рдХ рд╣реЛрдиреЗ рдкрд░, рдкрд╛рдпрдерди рдореЗрдВ рдПрдХ рд╣реИрд╢ рдлрдВрдХреНрд╢рди рдЕрдкрдиреЗ рдХрд╛рдо рдХреЛ рдПрдХ рдЧреБрдгрд╡рддреНрддрд╛рдкреВрд░реНрдг рддрд░реАрдХреЗ рд╕реЗ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЕрдЪреНрдЫрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ рдЕрдХреНрд╕рд░ рдРрд╕реЗ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЬреИрд╕реЗ рд╣реА рд╣рдо 'z' рдХреБрдВрдЬреА рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдПрдХ рдЯрдХрд░рд╛рд╡ рд╣реЛрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкрд┐рдЫрд▓реЗ рд╡рд╛рд▓реЗ рдХреЗ рдЕрдиреБрд░реВрдк рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред

рд╣рдо рдЬреЛрдбрд╝реЗ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рдХреА рдЧрдИ рд╕реВрдЪреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╣реА рд╣реИрд╢ рд╣реЛ, рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдЦреЛрдЬ рд╕рдордп рдмрдврд╝реЗрдЧрд╛, рдФрд░ рдпрд╣ рдФрд╕рддрди O (1) рдХреЗ рдмрд░рд╛рдмрд░ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрдиреБрднрд╛рдЧ рдкрд╛рдпрдерди рдореЗрдВ рд╢рдмреНрджрдХреЛрд╢реЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЯрдХрд░рд╛рд╡ рд╕рдВрдХрд▓реНрдк рд╡рд┐рдзрд┐ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред

рдЦреБрд▓рд╛ рдкрддрд╛

рдУрдкрди рдПрдбреНрд░реЗрд╕рд┐рдВрдЧ рдПрдХ рдЯрдХреНрдХрд░ рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рддрдХрдиреАрдХ рд╣реИ рдЬреЛ рдкреНрд░реЛрдмрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИред 'z' рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕реЗрд▓ 3 рдХрд╛ рд╕реВрдЪрдХрд╛рдВрдХ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рд░рдгреА рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рджреВрд╕рд░реЗ рд╕реВрдЪрдХрд╛рдВрдХ рдХреА рддрд▓рд╛рд╢ рдХрд░рдиреА рд╣реЛрдЧреА рдЬреЛ рдЕрднреА рддрдХ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдПрдХ рдХреБрдВрдЬреА / рдореВрд▓реНрдп рдЬреЛрдбрд╝реА рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рд╕рдВрдЪрд╛рд▓рди рдФрд╕рдд рдУ (1) рдкрд░ рд╣реЛрддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдЦреЛрдЬ рдСрдкрд░реЗрд╢рди рднреАред

рдореБрдХреНрдд рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреА рдЦреЛрдЬ рдХреЗ рд▓рд┐рдП, рдПрдХ рджреНрд╡рд┐рдШрд╛рдд рдЬрд╛рдВрдЪ рдХреНрд░рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕реЗ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

 j = (5*j) + 1 + perturb; perturb >>= PERTURB_SHIFT; use j % 2**i as the next table index; 

(5 * j) +1 рдкрд░ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдмрд┐рдЯреНрд╕ рдореЗрдВ рдмрдбрд╝реЗ рдЕрдВрддрд░ рдХреЛ рдмрдврд╝рд╛рддреА рд╣реИ рдЬреЛ рдореВрд▓ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддреА рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЪрд░ "perturb" рд╣реИрд╢ рдХреЛрдб рдХреЗ рдЕрдиреНрдп рдмрд┐рдЯреНрд╕ рдореЗрдВ рд▓реЗрддрд╛ рд╣реИред

рдЖрдЗрдП рд╣рдо рдЬрд┐рдЬреНрдЮрд╛рд╕рд╛ рд╕реЗ рдмрд╛рд╣рд░ рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рддрд╛рд▓рд┐рдХрд╛ рдЖрдХрд╛рд░ 32 рдФрд░ j = 3 рдХреЗ рд╕рд╛рде рдПрдХ рдирдореВрдирд╛ рдЕрдиреБрдХреНрд░рдо рд╣реИред

3 -> 11 -> 19 -> 29 -> 5 -> 6 -> 16 -> 31 -> 28 -> 13 -> 2 ...

рдЖрдк рд╕реНрд░реЛрдд рдХреЛрдб рдХреЗ рд▓рд┐рдП рдбрд┐рдХреНрдЯреЛрдмреЛрдЬреЗрдХреНрдЯ рд╕реА.рдХреНрдпреВ рдХрд╛ рд╣рд╡рд╛рд▓рд╛ рджреЗрдХрд░ рдЗрд╕ рдЬрд╛рдВрдЪ рдХреНрд░рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВред рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдЬрд╛рдВрдЪ рддрдВрддреНрд░ рдХрд╛ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред



рдЖрдЗрдП рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдкрд╛рдпрдерди рд╕реНрд░реЛрдд рдХреЛрдб рджреЗрдЦреЗрдВред

рд╕реА рд╢рдмреНрджрдХреЛрд╢ рд╕рдВрд░рдЪрдирд╛рдУрдВ

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реА рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╢рдмреНрджрдХреЛрд╢ рдореЗрдВ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдХреБрдВрдЬреА / рдореВрд▓реНрдп рдЬреЛрдбрд╝реАред рд╣реИрд╢, рдХреБрдВрдЬреА рдФрд░ рдореВрд▓реНрдп рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИрдВред PyObject Python рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рд╣реИред

 typedef struct { Py_ssize_t me_hash; PyObject *me_key; PyObject *me_value; } PyDictEntry; 

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрд░рдЪрдирд╛ рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рд╣реИред ma_fill рдкреНрд░рдпреБрдХреНрдд рдФрд░ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреА рдХреБрд▓ рд╕рдВрдЦреНрдпрд╛ рд╣реИред рдЬрдм рдХреЛрдИ рдХреБрдВрдЬреА рдЬреЛрдбрд╝реА рд╣рдЯрд╛ рджреА рдЬрд╛рддреА рд╣реИ рддреЛ рдПрдХ рд╕реЗрд▓ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред ma_used рдкреНрд░рдпреБрдХреНрдд (рд╕рдХреНрд░рд┐рдп) рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИред ma_mask -1 рд╕рд░рдгреА рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реЗрд▓ рдЗрдВрдбреЗрдХреНрд╕ рдХреА рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред ma_table рдПрдХ рд╕рд░рдгреА рд╣реИ, рдФрд░ ma_smalltable рдЖрдХрд╛рд░ 8 рдХрд╛ рдореВрд▓ рд╕рд░рдгреА рд╣реИред

 typedef struct _dictobject PyDictObject; struct _dictobject { PyObject_HEAD Py_ssize_t ma_fill; Py_ssize_t ma_used; Py_ssize_t ma_mask; PyDictEntry *ma_table; PyDictEntry *(*ma_lookup)(PyDictObject *mp, PyObject *key, long hash); PyDictEntry ma_smalltable[PyDict_MINSIZE]; }; 

рд╢рдмреНрджрд╛рд╡рд▓реА рдкреНрд░рд╛рд░рдВрднрд┐рдХ

рдЬрдм рдЖрдк рд╕рд┐рд░реНрдл рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ PyDict_New() рдлрд╝рдВрдХреНрд╢рди PyDict_New() ред рдореИрдВрдиреЗ рдХреБрдЫ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдФрд░ рдкреНрд░рдореБрдЦ рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реА рдХреЛрдб рдХреЛ рдЫрджреНрдо рдХреЛрдб рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ред

PyDict_New() рдлрд╝рдВрдХреНрд╢рди:

  • рд╢рдмреНрджрдХреЛрд╢ рд╡рд╕реНрддреБ рд▓реМрдЯрд╛рддрд╛ рд╣реИ;
  • рдПрдХ рдирдИ рд╢рдмреНрджрдХреЛрд╢ рд╡рд╕реНрддреБ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рддрд╛ рд╣реИ;
  • рд╢рдмреНрджрдХреЛрд╢ рддрд╛рд▓рд┐рдХрд╛ рд╕рд╛рдл рдХрд░рддрд╛ рд╣реИ;
  • рдкреНрд░рдпреБрдХреНрдд рд╢рдмреНрджрдХреЛрд╢ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдФрд░ рдЕрдкреНрд░рдпреБрдХреНрдд рдХреЛрд╢рд┐рдХрд╛рдУрдВ ( ma_fill ) рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ 0 рдкрд░ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ;
  • рд╕рдХреНрд░рд┐рдп рдХреЛрд╢рд┐рдХрд╛рдУрдВ ( ma_used ) рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ 0 рдкрд░ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ;
  • рдбрд┐рдХреНрд╢рдирд░реА рдорд╛рд╕реНрдХ ( ma_value ) рдХреЛ рдбрд┐рдХреНрд╢рдирд░реА рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рдмрд░рд╛рдмрд░ рдорд╛рди - 1 = 7;
  • рд╢рдмреНрджрдХреЛрд╢ рдЦреЛрдЬ рдлрд╝рдВрдХреНрд╢рди рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ lookdict_string ;
  • рдЖрд╡рдВрдЯрд┐рдд рд╢рдмреНрджрдХреЛрд╢ рд╡рд╕реНрддреБ рд▓реМрдЯрд╛рддрд╛ рд╣реИред

рдЖрдЗрдЯрдо рдЬреЛрдбрд╝реЗрдВ

рдЬрдм рдХреЛрдИ рдирдпрд╛ рдХреБрдВрдЬреА / рдорд╛рди рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ PyDict_SetItem() рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдбрд┐рдХреНрд╢рдирд░реА рдХреЛ рдПрдХ рд╕реВрдЪрдХ рд╡рд╕реНрддреБ рдФрд░ рдПрдХ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдХреБрдВрдЬреА / рдорд╛рди рдпреБрдЧреНрдо рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЬрд╛рдВрдЪрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдХреБрдВрдЬреА рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ рдФрд░ рд╣реИрд╢ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдХреИрд╢реНрдб рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдпрджрд┐ рдХреЛрдИ рдореМрдЬреВрдж рд╣реИред insertdict() рдХреЛ рдПрдХ рдирдИ рдХреБрдВрдЬреА / рдореВрд▓реНрдп рдЬреЛрдбрд╝реА рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╢рдмреНрджрдХреЛрд╢ рдЖрдХрд╛рд░ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ рдпрджрд┐ рдЙрдкрдпреЛрдЧ рдХреА рдЧрдИ рдФрд░ рдЕрдкреНрд░рдпреБрдХреНрдд рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕рд░рдгреА рдХреЗ рдЖрдХрд╛рд░ рдХреЗ 2/3 рд╕реЗ рдЕрдзрд┐рдХ рд╣реИред

рдХреНрдпреЛрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ 2/3? рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдЬрд╛рдВрдЪ рдЕрдиреБрдХреНрд░рдо рдореБрдХреНрдд рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рдкрд╛ рд╕рдХреЗред рдмрд╛рдж рдореЗрдВ рд╣рдо рдЖрдХрд╛рд░ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред

 arguments: dictionary, key, value returns: 0 if OK or -1 function PyDict_SetItem: if key's hash cached: use hash else: calculate hash call insertdict with dictionary object, key, hash and value if key/value pair added successfully and capacity over 2/3: call dictresize to resize dictionary's table 

inserdict() рдПрдХ рдирд┐: рд╢реБрд▓реНрдХ рд╕реЗрд▓ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП lookdict_string() рдЦреЛрдЬ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдХреБрдВрдЬреА рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрд╕реА рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

lookdict_string() рд╣реИрд╢ рдФрд░ рдорд╛рд╕реНрдХ рдорд╛рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реЗрд▓ рдЗрдВрдбреЗрдХреНрд╕ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рд╡рд╣ рд╕реЗрд▓ рдЗрдВрдбреЗрдХреНрд╕ = рд╣реИрд╢ рдПрдВрдб рдорд╛рд╕реНрдХ (рд╕реНрд▓реЙрдЯ рдЗрдВрдбреЗрдХреНрд╕ = рд╣реИрд╢ рдПрдВрдб рдорд╛рд╕реНрдХ) рдХреЗ рдореВрд▓реНрдп рд╕реЗ рдХреБрдВрдЬреА рдирд╣реАрдВ рдвреВрдВрдв рд╕рдХрддрд╛ рд╣реИ, рддреЛ рд╡рд╣ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдЪрдХреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рд╡рд╣ рдПрдХ рдореБрдлреНрдд рд╕реЗрд▓ рдирд╣реАрдВ рдкрд╛рддрд╛ред рдЬрд╛рдВрдЪ рдХреЗ рдкрд╣рд▓реЗ рдкреНрд░рдпрд╛рд╕ рдореЗрдВ, рдпрджрд┐ рдХреБрдВрдЬреА null , рддреЛ рдкрд╣рд▓реА рдЦреЛрдЬ рдХреЗ рджреМрд░рд╛рди рдпрд╣ рдЕрдкреНрд░рдпреБрдХреНрдд рд╕реЗрд▓ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣рдЯрд╛рдИ рдЧрдИ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИред
рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреБрдВрдЬреА / рдореВрд▓реНрдп рдЬреЛрдбрд╝реЗ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ: {'a': 1, 'b': 2тА▓, 'z': 26, 'y': 25, 'c': 5, 'x': 24} ред рдпрд╣рд╛рдБ рдХреНрдпрд╛ рд╣реЛрдЧрд╛:

рд╢рдмреНрджрдХреЛрд╢ рд╕рдВрд░рдЪрдирд╛ 8 рдХреЗ рддрд╛рд▓рд┐рдХрд╛ рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде рдЖрд╡рдВрдЯрд┐рдд рдХреА рдЧрдИ рд╣реИред

  • PyDict_SetItem: key = 'a', value = 1
    • рд╣реИрд╢ = рд╣реИрд╢ ('рдП') = 12416037344
    • insertdict
      • lookdict_string
        • рд╕реНрд▓реЙрдЯ рдЗрдВрдбреЗрдХреНрд╕ = рд╣реИрд╢ рдФрд░ рдорд╛рд╕реНрдХ = 12416037344 рдФрд░ 7 = 0
        • рд╕реНрд▓реЙрдЯ 0 рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕ рд╕реЗрд▓ рдХреЛ рд▓реМрдЯрд╛рдПрдВ
      • рдЗрдВрдбреЗрдХреНрд╕ 0 рдореЗрдВ рдХреБрдВрдЬреА, рдорд╛рди рдФрд░ рд╣реИрд╢ рдХреЗ рд╕рд╛рде рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХрд╛ рдЖрд░рдВрдн
      • ma_used = 1, ma_fill = 1
  • PyDict_SetItem: рдХреБрдВрдЬреА = 'b', рдорд╛рди = 2
    • рд╣реИрд╢ = рд╣реИрд╢ ('рдмреА') = 12544037731
    • insertdict
      • lookdict_string
        • рд╕реНрд▓реЙрдЯ рдЗрдВрдбреЗрдХреНрд╕ = рд╣реИрд╢ рдФрд░ рдорд╛рд╕реНрдХ = 12544037731 рдФрд░ 7 = 3
        • рд╕реНрд▓реЙрдЯ 3 рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕ рд╕реЗрд▓ рдХреЛ рд▓реМрдЯрд╛рдПрдВ
      • рдЗрдВрдбреЗрдХреНрд╕ 3 рдореЗрдВ рдХреБрдВрдЬреА, рдореВрд▓реНрдп рдФрд░ рд╣реИрд╢ рдХреЗ рд╕рд╛рде рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХрд╛ рдЖрд░рдВрдн
      • ma_used = 2, ma_fill = 2
  • PyDict_SetItem: рдХреБрдВрдЬреА = 'z', рдорд╛рди = 26
    • рд╣реИрд╢ = рд╣реИрд╢ ('z') = 15616046971
    • insertdict
      • lookdict_string
        • рд╕реНрд▓реЙрдЯ рдЗрдВрдбреЗрдХреНрд╕ = рд╣реИрд╢ рдФрд░ рдорд╛рд╕реНрдХ = 15616046971 рдФрд░ 7 = 3
        • рд╕реНрд▓реЙрдЯ 3 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рджреВрд╕рд░реЗ рд╕реЗрд▓ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ: 5 рдореБрдлрд╝реНрдд рд╣реИ

        рдЗрдВрдбреЗрдХреНрд╕ 5 рдореЗрдВ рдХреБрдВрдЬреА, рдореВрд▓реНрдп рдФрд░ рд╣реИрд╢ рдХреЗ рд╕рд╛рде рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХрд╛ рдЖрд░рдВрдн
        ma_used = 3, ma_fill = 3
  • PyDict_SetItem: рдХреБрдВрдЬреА = 'y', рдорд╛рди = 25
    • рд╣реИрд╢ = рд╣реИрд╢ ('y') = 15488046584
    • insertdict
      • lookdict_string
        • рд╕реНрд▓реЙрдЯ рдЗрдВрдбреЗрдХреНрд╕ = рд╣реИрд╢ рдФрд░ рдорд╛рд╕реНрдХ = 15488046584 рдФрд░ 7 = 0
        • рд╕реНрд▓реЙрдЯ 0 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рджреВрд╕рд░реЗ рд╕реЗрд▓ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ: 1 рдореБрдлрд╝реНрдд рд╣реИ
      • рдЗрдВрдбреЗрдХреНрд╕ 1 рдореЗрдВ рдХреБрдВрдЬреА, рдореВрд▓реНрдп рдФрд░ рд╣реИрд╢ рдХреЗ рд╕рд╛рде рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХрд╛ рдЖрд░рдВрдн
      • ma_used = 4, ma_fill = 4

PyDict_SetItem: key = 'c', value = 3
  • рд╣реИрд╢ = рд╣реИрд╢ ('c') = 12672038114
  • insertdict
    • lookdict_string
      • рд╕реНрд▓реЙрдЯ рдЗрдВрдбреЗрдХреНрд╕ = рд╣реИрд╢ рдФрд░ рдорд╛рд╕реНрдХ = 12672038114 рдФрд░ 7 = 2
      • рд╕реНрд▓реЙрдЯ 2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕ рд╕реЗрд▓ рдХреЛ рд▓реМрдЯрд╛рдПрдВ
    • рдЗрдВрдбреЗрдХреНрд╕ 2 рдореЗрдВ рдХреБрдВрдЬреА, рдореВрд▓реНрдп рдФрд░ рд╣реИрд╢ рдХреЗ рд╕рд╛рде рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХрд╛ рдЖрд░рдВрдн
    • ma_used = 5, ma_fill = 5

PyDict_SetItem: рдХреБрдВрдЬреА = 'x', рдорд╛рди = 24
  • рд╣реИрд╢ = рд╣реИрд╢ ('x') = 15360046201
  • insertdict
    • lookdict_string
      • рд╕реНрд▓реЙрдЯ рдЗрдВрдбреЗрдХреНрд╕ = рд╣реИрд╢ рдФрд░ рдорд╛рд╕реНрдХ = 15360046201 рдФрд░ 7 = 1
      • рд╕реНрд▓реЙрдЯ 1 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рджреВрд╕рд░реЗ рд╕реЗрд▓ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ: 7 рдореБрдлрд╝реНрдд рд╣реИ
    • рдЗрдВрдбреЗрдХреНрд╕ 7 рдореЗрдВ рдХреБрдВрдЬреА, рдореВрд▓реНрдп рдФрд░ рд╣реИрд╢ рдХреЗ рд╕рд╛рде рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХрд╛ рдЖрд░рдВрдн
    • ma_used = 6, ma_fill = 6

рдпрд╣рд╛рдБ рд╣рдо рдХреНрдпрд╛ рдорд┐рд▓рддрд╛ рд╣реИ:



рдЕрдм 8 рдореЗрдВ рд╕реЗ 6 рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕рд░рдгреА рдХреНрд╖рдорддрд╛ рдХреЗ 2/3 рд╕реЗ рдЕрдзрд┐рдХ рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдмрдбрд╝рд╛ рд╕рд░рдгреА рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП dictresize() рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдкреБрд░рд╛рдиреЗ рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рдирдП рддрдХ рдХреЗ рд░рд┐рдХреЙрд░реНрдб рдХреА рднреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рддрд╛ рд╣реИред

рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ dictresize () рдХреЛ minused = 24 рдХреЗ рд╕рд╛рде рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдБ 4 * ma_used ред 2 * ma_used рдЙрдкрдпреЛрдЧ рддрдм рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдмрд╣реБрдд рдмрдбрд╝реА рд╣реЛрддреА рд╣реИ (50,000 рд╕реЗ рдЕрдзрд┐рдХ)ред рдХреНрдпреЛрдВ 4 рдЧреБрдирд╛ рдЕрдзрд┐рдХ рдХреЛрд╢рд┐рдХрд╛рдПрдВ рд╣реИрдВ? рдпрд╣ рдЖрдХрд╛рд░ рдмрджрд▓рдиреЗ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдФрд░ рд╡рд┐рд░рд▓рддрд╛ рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрджрдореЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИред

рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдирдпрд╛ рдЖрдХрд╛рд░ 24 рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рдХреА рдЧрдгрдирд╛ рд╡рд░реНрддрдорд╛рди рдЖрдХрд╛рд░ рдХреЛ 1 рдмрд┐рдЯ рд╕реЗ рдмрд╛рдИрдВ рдУрд░ рддрдм рддрдХ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдЖрдХрд╛рд░ 24 рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдпрд╣ 32 рд╣реЛрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 8 -> 16 - 32ред

рдЖрдХрд╛рд░ рдмрджрд▓рдиреЗ рдХреЗ рджреМрд░рд╛рди рд╣рдорд╛рд░реА рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ: рдЖрдХрд╛рд░ 32 рдХреА рдПрдХ рдирдИ рддрд╛рд▓рд┐рдХрд╛ рдкрд░ рдкреНрд░рдХрд╛рд╢ рдбрд╛рд▓рд╛ рдЧрдпрд╛ рд╣реИред рдкреБрд░рд╛рдиреА рддрд╛рд▓рд┐рдХрд╛ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреЛ 31 рдХреЗ рдирдП рдореБрдЦреМрдЯрд╛ рдореВрд▓реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирдИ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдбрд╛рд▓рд╛ рдЧрдпрд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдо рдирд┐рдореНрди рд╣реИ:



рдЖрдЗрдЯрдо рд╣рдЯрд╛рдПрдВ

PyDict_DelItem() рд░рд┐рдХреЙрд░реНрдбреНрд╕ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣реИрд╢ рдХреА рдЧрдгрдирд╛ рд░рд┐рдХреЙрд░реНрдб рдХреБрдВрдЬреА рдХреЗ рд▓рд┐рдП рдХреА рдЬрд╛рддреА рд╣реИ, рдлрд┐рд░ рд░рд┐рдХреЙрд░реНрдб рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЛрдЬ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдм рд╕реЗрд▓ рдЦрд╛рд▓реА рд╣реИред

рд╣рдо рдЕрдкрдиреЗ рд╢рдмреНрджрдХреЛрд╢ рд╕реЗ рд╕реА рдХреБрдВрдЬреА рдХреЛ рд╣рдЯрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдореЗрдВ рдирд┐рдореНрди рд╕рд░рдгреА рдорд┐рд▓рддреА рд╣реИ:



рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдХрд┐рд╕реА рддрддреНрд╡ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рд╕рд░рдгреА рдХрд╛ рдЖрдХрд╛рд░ рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИ рдпрджрд┐ рдЙрдкрдпреЛрдЧ рдХреА рдЧрдИ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЙрдирдХреА рдХреБрд▓ рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдмрд╣реБрдд рдХрдо рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬрдм рдПрдХ рдХреБрдВрдЬреА / рдореВрд▓реНрдп рдЬреЛрдбрд╝реА рдХреЛ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдХрд╛рд░ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЙрдкрдпреЛрдЧ рдХреА рдЧрдИ рдФрд░ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдСрдкрд░реЗрд╢рди рднреА рд╕рд░рдгреА рдХреЛ рдХрдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдпрд╣ рдкреНрд░рдХрд╛рд╢рди рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рд╣рдо рдкрд░рдВрдкрд░рд╛рдЧрдд рд░реВрдк рд╕реЗ рдЖрдкрдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕рднреА рдХреЛ рдПрдХ рдЦреБрд▓реЗ рдкрд╛рда рдХреЗ рд▓рд┐рдП рдЖрдордВрддреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ 18 рдЕрдкреНрд░реИрд▓ рдХреЛ рдЖрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

Source: https://habr.com/ru/post/hi448350/


All Articles