рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░, 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 рдЕрдкреНрд░реИрд▓ рдХреЛ рдЖрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред