рдкрд╛рдпрдерди рдореЗрдВ рд╕рдВрдХреЗрдд: рдХреНрдпрд╛ рдмрд╛рдд рд╣реИ?


рдпрджрд┐ рдЖрдкрдиреЗ рдХрднреА C рдпрд╛ C ++ рдЬреИрд╕реА рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдЖрдкрдиреЗ рд╢рд╛рдпрдж рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реБрдирд╛ рд╣реИред рд╡реЗ рдЖрдкрдХреЛ рдХреЛрдб рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдЯреБрдХрдбрд╝реЛрдВ рдХреА рдкреНрд░рднрд╛рд╡рд╢реАрд▓рддрд╛ рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╡реЗ рдиреМрд╕рд┐рдЦрд┐рдпреЛрдВ рдХреЛ рднреНрд░рдорд┐рдд рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдиреБрднрд╡реА рдбреЗрд╡рд▓рдкрд░реНрд╕ - рдФрд░ рд╕реНрдореГрддрд┐ рдкреНрд░рдмрдВрдзрди рдмрдЧреЛрдВ рдХреЛ рдЬрдиреНрдо рджреЗрддреЗ рд╣реИрдВред рдХреНрдпрд╛ рдкрд╛рдпрдерди рдореЗрдВ рд╕рдВрдХреЗрдд рд╣реИрдВ, рдХреНрдпрд╛ рдореИрдВ рдХрд┐рд╕реА рддрд░рд╣ рдЙрдирдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?

рд╕реА рдФрд░ рд╕реА ++ рдореЗрдВ рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХрд╛ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпреЗ рд╡реЗ рдЪрд░ рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рдореЗрдореЛрд░реА рдкрддреЗ рд╣реЛрддреЗ рд╣реИрдВ, рдЬрд┐рд╕ рдкрд░ рдЕрдиреНрдп рдЪрд░ рд╕реНрдерд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рдкреЙрдЗрдВрдЯрд░реНрд╕ рдкрд░ рдмреНрд░рд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╕рдореАрдХреНрд╖рд╛ рдкрдврд╝реЗрдВред

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

рдЗрд╕ рд▓реЗрдЦ рдХреЗ рд╕рд╛рде, рдЖрдк:

  • рдЬрд╛рдиреЗрдВ рдХрд┐ рдкрд╛рдпрдерди рдореЗрдВ рд╕рдВрдХреЗрдд рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реИрдВред
  • рдкрд╛рдпрдерди рдореЗрдВ рд╕реА рдЪрд░ рдФрд░ рдирд╛рдореЛрдВ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдЬрд╛рдиреЗрдВред
  • рдкрд╛рдпрдерди рдореЗрдВ рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдирд╛ рд╕реАрдЦреЗрдВред
  • рд╡рд╛рд╕реНрддрд╡рд┐рдХ ctypes рд╕рд╛рде рдкреНрд░рдпреЛрдЧ ctypes рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рдиреЛрдЯ : рдпрд╣рд╛рдБ, рд╢рдмреНрдж "рдкрд╛рдпрдерди" рдХреЛ C рдореЗрдВ рдкрд╛рдпрдерди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕реЗ CPython рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рднрд╛рд╖рд╛ рдЙрдкрдХрд░рдг рдХреА рд╕рднреА рдЪрд░реНрдЪрд╛рдПрдБ CPython 3.7 рдХреЗ рд▓рд┐рдП рдорд╛рдиреНрдп рд╣реИрдВ, рд▓реЗрдХрд┐рди рдмрд╛рдж рдХреЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ рдЕрдиреБрд░реВрдк рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред

рдкрд╛рдпрдерди рдореЗрдВ рд╕рдВрдХреЗрдд рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реИрдВ?


рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХреНрдпрд╛ рдкрд╛рдпрдерди рдореВрд▓ рд░реВрдк рд╕реЗ рдореМрдЬреВрдж рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ? рд╢рд╛рдпрдж, рд▓реЗрдХрд┐рди рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдмрд┐рдВрджреБрдУрдВ рдиреЗ рдкрд╛рдпрдерди рдХреЗ рдЬрд╝реЗрди рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЗ рд╡рд┐рдкрд░реАрдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╕реНрдкрд╖реНрдЯ рд▓реЛрдЧреЛрдВ рдХреЗ рдмрдЬрд╛рдп рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рднрдбрд╝рдХрд╛рддреЗ рд╣реИрдВред рдкреЙрдЗрдВрдЯрд░реНрд╕ рдЕрдХреНрд╕рд░ рдХрд╛рдлреА рдЬрдЯрд┐рд▓ рд╣реЛрддреЗ рд╣реИрдВ, рдЦрд╛рд╕рдХрд░ рд╢реБрд░реБрдЖрддреА рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдПред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡реЗ рдЖрдкрдХреЛ рдЕрд╕рдлрд▓ рдирд┐рд░реНрдгрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдзрдХреНрдХрд╛ рджреЗрддреЗ рд╣реИрдВ рдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЦрддрд░рдирд╛рдХ рдХреБрдЫ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬреИрд╕реЗ рдХрд┐ рд╕реНрдореГрддрд┐ рдХреНрд╖реЗрддреНрд░ рд╕реЗ рдкрдврд╝рдирд╛, рдЬрд╣рд╛рдВ рдЖрдкрдХреЛ рдЗрд╕реЗ рдирд╣реАрдВ рдкрдврд╝рдирд╛ рдЪрд╛рд╣рд┐рдПред

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

рдкрд╛рдпрдерди рдореЗрдВ рд╕рдВрдХреЗрдд рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рднрд╛рд╖рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдкрд░ рдЬрд╛рдПрдВред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЖрдкрдХреЛ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

  1. рдкрд░рд╕реНрдкрд░ рдФрд░ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╡рд╕реНрддреБрдПрдБ рдХреНрдпрд╛ рд╣реИрдВред
  2. рдкрд╛рдЗрдерди рдореЗрдВ рдЪрд░ / рдирд╛рдо рдХреИрд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд╣реЛрддреЗ рд╣реИрдВред

рдЕрдкрдиреЗ рд╕реНрдореГрддрд┐ рдкрддреЛрдВ рдХреЛ рдкрдХрдбрд╝реЛ, рдЪрд▓реЛ рдЪрд▓реЗрдВ!

рдкрд╛рдпрдерди рдореЗрдВ рд╡рд╕реНрддреБрдПрдБ


рдЕрдЬрдЧрд░ рдореЗрдВ рд╕рдм рдХреБрдЫ рдПрдХ рд╡рд╕реНрддреБ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, REPL рдЦреЛрд▓реЗрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдХрд┐рд╕ isinstance() :

 >>> isinstance(1, object) True >>> isinstance(list(), object) True >>> isinstance(True, object) True >>> def foo(): ... pass ... >>> isinstance(foo, object) True 

рдпрд╣ рдХреЛрдб рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рдкрд╛рдпрдерди рдореЗрдВ рд╕рдм рдХреБрдЫ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╡рд╕реНрддреБ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рддреАрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдбреЗрдЯрд╛ рд╣реЛрддреЗ рд╣реИрдВ:

  • рд╕рдВрджрд░реНрдн рдХрд╛рдЙрдВрдЯрд░ред
  • рдЯрд╛рдЗрдк рдХрд░реЗрдВред
  • рдорд╛рдиред

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

рд▓реЗрдХрд┐рди рд╕рднреА рд╡рд╕реНрддреБрдПрдВ рд╕рдорд╛рди рдирд╣реАрдВ рд╣реИрдВред рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрдВрддрд░ рд╣реИ: рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░рд╕реНрдкрд░ рдФрд░ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╣реИрдВред рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдмреАрдЪ рдЗрд╕ рдЕрдВрддрд░ рдХреЛ рд╕рдордЭрдирд╛ рдЖрдкрдХреЛ рдкреНрдпрд╛рдЬ рдХреА рдкрд╣рд▓реА рдкрд░рдд рдХреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ рдЬрд┐рд╕реЗ "рдкрд╛рдпрдерди рдореЗрдВ рд╕рдВрдХреЗрдд" рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдФрд░ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╡рд╕реНрддреБрдПрдБ


рдкрд╛рдпрдерди рдореЗрдВ рджреЛ рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд╕реНрддреБрдПрдБ рд╣реИрдВ:

  1. рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╡рд╕реНрддреБрдПрдВ (рдмрджрд▓реА рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддреА);
  2. рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рд╡рд╕реНрддреБрдПрдБ (рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдЕрдзреАрди)ред

рдЗрд╕ рдЕрдВрддрд░ рдХреЛ рдкрд╣рдЪрд╛рдирдирд╛ рдкрд╛рдпрдерди рдореЗрдВ рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХреА рджреБрдирд┐рдпрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдпрд╛рддреНрд░рд╛ рдХрд░рдиреЗ рдХреА рдкрд╣рд▓реА рдХреБрдВрдЬреА рд╣реИред рдпрд╣рд╛рдБ рдХреБрдЫ рд▓реЛрдХрдкреНрд░рд┐рдп рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рдЕрдкрд░рд┐рд╣рд╛рд░реНрдпрддрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ:

рдЯрд╛рдЗрдк
рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп?
рдкреВрд░реНрдгрд╛рдВрдХ
рд╣рд╛рдВ
рдирд╛рд╡
рд╣рд╛рдВ
bool
рд╣рд╛рдВ
рдЬрдЯрд┐рд▓
рд╣рд╛рдВ
рдЯрдкрд▓
рд╣рд╛рдВ
frozenset
рд╣рд╛рдВ
str
рд╣рд╛рдВ
рд╕реВрдЪреА
рдирд╣реАрдВ
рд╕реЗрдЯ
рдирд╣реАрдВ
dict
рдирд╣реАрдВ

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрдорддреМрд░ рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХрдИ рдЖрджрд┐рдо рдкреНрд░рдХрд╛рд░ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╣реИрдВред рдЖрдк рдХреБрдЫ рдкрд╛рдпрдерди рдХреЛрдб рд▓рд┐рдЦрдХрд░ рдЗрд╕реЗ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдкрдХреЛ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ рджреЛ рдЙрдкрдХрд░рдгреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА:

  1. id() рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдореЗрдореЛрд░реА рдПрдбреНрд░реЗрд╕ рд▓реМрдЯрд╛рддрд╛ рд╣реИ;
  2. рдпрджрд┐ рд░рд┐рдЯрд░реНрди True рд╣реИ рдФрд░ рдХреЗрд╡рд▓ рдЕрдЧрд░ рджреЛ рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ рд╕рдорд╛рди рдореЗрдореЛрд░реА рдкрддрд╛ рд╣реИред

рдЖрдк рдЗрд╕ рдХреЛрдб рдХреЛ REPL рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ:

 >>> x = 5 >>> id(x) 94529957049376 

рдпрд╣рд╛рдВ рд╣рдо рдЪрд░ x рдХреЛ 5 рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдореВрд▓реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдПрдХ рдирдИ рд╡рд╕реНрддреБ рдорд┐рд▓реЗрдЧреА:

 >>> x += 1 >>> x 6 >>> id(x) 94529957049408 

рдпрджреНрдпрдкрд┐ рдРрд╕рд╛ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреЛрдб рдХреЗрд╡рд▓ x рдХрд╛ рдорд╛рди рдмрджрд▓рддрд╛ рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдкрдХреЛ рдЙрддреНрддрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдирдИ рд╡рд╕реНрддреБ рдорд┐рд▓ рд░рд╣реА рд╣реИред

str рдкреНрд░рдХрд╛рд░ рднреА рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╣реИ:

 >>> s = "real_python" >>> id(s) 140637819584048 >>> s += "_rocks" >>> s 'real_python_rocks' >>> id(s) 140637819609424 

рдФрд░ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдСрдкрд░реЗрд╢рди рдХреЗ рдмрд╛рдж s += рдХреЛ рдПрдХ рдЕрд▓рдЧ рдореЗрдореЛрд░реА рдПрдбреНрд░реЗрд╕ рдорд┐рд▓рддрд╛ рд╣реИред

рдмреЛрдирд╕ : += рдСрдкрд░реЗрдЯрд░ рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рдзрд┐ рдХреЙрд▓реЛрдВ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рддрд╛ рд╣реИред

рдХреБрдЫ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП, рдЬреИрд╕реЗ рдХрд┐ рдПрдХ рд╕реВрдЪреА, += __iadd__() (рд╕реНрдерд╛рдиреАрдп рдкрд░рд┐рд╢рд┐рд╖реНрдЯ) рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛрддреА рд╣реИред рдпрд╣ рдЦреБрдж рд╣реА рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдЙрд╕реА рдЖрдИрдбреА рдХреЛ рд╡рд╛рдкрд╕ рдХрд░реЗрдЧрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, str рдФрд░ int рдореЗрдВ рдпреЗ рд╡рд┐рдзрд┐рдпрд╛рдБ рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк __add__() рдмрдЬрд╛рдп __add__() рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред

рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдкрд╛рдпрдерди рдбреЗрдЯрд╛ рдореЙрдбрд▓ рдкреНрд░рд▓реЗрдЦрди рджреЗрдЦреЗрдВ ред

рдЬрдм рд╣рдо рд╕реАрдзреЗ s рдХреЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдорд╛рди рдХреЛ рдмрджрд▓рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ s рддреЛ рд╣рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ:

 >>> s[0] = "R" 

рдмреИрдХ рдЯреНрд░реЗрд╕ (рд╕рдмрд╕реЗ рд╣рд╛рд▓рд┐рдпрд╛ рдХреЙрд▓ рдЕрдВрддрд┐рдо рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддреА рд╣реИрдВ):

  File "<stdin>", line 1, in <mdule> TypeError: 'str' object does not support item assignment 

рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдХреНрд░реИрд╢ рдФрд░ рдкрд╛рдпрдерди рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ str рдЗрд╕ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдкреНрд░рдХрд╛рд░ str рдХреА рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдпрддрд╛ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред

рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде, рдПрдХ рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╡рд╕реНрддреБ рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХрд░реЗрдВ:

 >>> my_list = [1, 2, 3] >>> id(my_list) 140637819575368 >>> my_list.append(4) >>> my_list [1, 2, 3, 4] >>> id(my_list) 140637819575368 

рдпрд╣ рдХреЛрдб рджреЛ рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдмреАрдЪ рдореБрдЦреНрдп рдЕрдВрддрд░ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, my_list рдкрд╛рд╕ рдПрдХ рдЖрдИрдбреА рд╣реИред рд╕реВрдЪреА рдореЗрдВ 4 рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж рднреА, my_list рдЕрднреА рднреА рд╕рдорд╛рди рдЖрдИрдбреА рд╣реИред рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдЯрд╛рдЗрдк list рдкрд░рд╕реНрдкрд░ рд╣реИред

рдпрд╣рд╛рдВ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реВрдЪреА рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓рддрд╛ рдХрд╛ рдПрдХ рдФрд░ рдкреНрд░рджрд░реНрд╢рди рд╣реИ:

 >>> my_list[0] = 0 >>> my_list [0, 2, 3, 4] >>> id(my_list) 140637819575368 

рдЗрд╕ рдХреЛрдб рдореЗрдВ, рд╣рдордиреЗ my_list рдмрджрд▓ рджрд┐рдпрд╛ рдФрд░ рдЗрд╕реЗ рдкрд╣рд▓реЗ рддрддреНрд╡ рдХреЗ рд░реВрдк рдореЗрдВ 0 рд╕реЗрдЯ рдХрд┐рдпрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрд╕ рдСрдкрд░реЗрд╢рди рдХреЗ рдмрд╛рдж рд╕реВрдЪреА рдиреЗ рдЙрд╕реА рдЖрдИрдбреА рдХреЛ рдмрдирд╛рдП рд░рдЦрд╛ред рдкрд╛рдпрдерди рд╕реАрдЦрдиреЗ рдХреЗ рд╣рдорд╛рд░реЗ рдорд╛рд░реНрдЧ рдкрд░ рдЕрдЧрд▓рд╛ рдХрджрдо рдЗрд╕рдХреЗ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдХреА рдЦреЛрдЬ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рд╣рдо рдЪрд░ рд╕реЗ рдирд┐рдкрдЯрддреЗ рд╣реИрдВ


рдкрд╛рдпрдерди рдореЗрдВ рдЪрд░ C рдФрд░ C ++ рдореЗрдВ рдЪрд░ рд╕реЗ рдореВрд▓рднреВрдд рд░реВрдк рд╕реЗ рднрд┐рдиреНрди рд╣реИрдВред рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ, рд╡реЗ рд╕рд┐рд░реНрдл рдкрд╛рдпрдерди рдореЗрдВ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИрдВред рдЪрд░реЛрдВ рдХреА рдЬрдЧрд╣ рдирд╛рдо рд╣реИрдВ ред

рдпрд╣ рдкрд╛рдВрдбрд┐рддреНрдп рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЕрдзрд┐рдХрд╛рдВрд╢ рднрд╛рдЧ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╣реИред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░, рдЖрдк рдкрд╛рдпрдерди рдореЗрдВ рдЪрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╛рдо рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдЕрдВрддрд░ рдХреЛ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдЬрдм рдЖрдк рдРрд╕реЗ рдХрдард┐рди рд╡рд┐рд╖рдп рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдХрд┐ рд╕рдВрдХреЗрддред

рдЖрдкрдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рд╕рдордЭрдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╕реА рдореЗрдВ рдЪрд░ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рд╡реЗ рдХреНрдпрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдкрд╛рдпрдерди рдореЗрдВ рдирд╛рдореЛрдВ рдХреЗ рдХрд╛рдо рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХрд░реЗрдВред

рдЪрд░ рдореЗрдВ рд╕реА


рдЪрд░ x рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдб рд▓реЗрдВ:

 int x = 2337; 

рдЗрд╕ рдЫреЛрдЯреА рд░реЗрдЦрд╛ рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЪрд░рдгреЛрдВ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ:

  1. рдПрдХ рдирдВрдмрд░ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдирд╛ред
  2. рдЗрд╕ рд╕реНрдореГрддрд┐ рд╕реНрдерд╛рди рдХреЛ 2337 рдХрд╛ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯред
  3. рдореИрдкрд┐рдВрдЧ рдЬреЛ x рдЗрд╕ рдорд╛рди рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред

рдПрдХ рд╕рд░рд▓реАрдХреГрдд рд╕реНрдореГрддрд┐ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддреА рд╣реИ:



рдпрд╣рд╛рдВ, рдЪрд░ x рдореЗрдВ 0x7f1 рдХрд╛ рдирдХрд▓реА рдкрддрд╛ рдФрд░ 2337 рдорд╛рди рд╣реИред рдпрджрд┐ рдЖрдк рдмрд╛рдж рдореЗрдВ x рдХрд╛ рдорд╛рди рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 x = 2338; 

рдпрд╣ рдХреЛрдб рдЪрд░ x 2338 рдирдП рдорд╛рди рдкрд░ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдкрд┐рдЫрд▓реЗ рдорд╛рди рдХреЛ рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЪрд░ x рдкрд░рд╕реНрдкрд░ рд╣реИ ред рдирдП рдорд╛рди рдХреЗ рд▓рд┐рдП рдЕрджреНрдпрддрд┐рдд рд╕реНрдореГрддрд┐ рдпреЛрдЬрдирд╛:



рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ x рд╕реНрдерд╛рди рдирд╣реАрдВ рдмрджрд▓рд╛ рд╣реИ, рдХреЗрд╡рд▓ рдореВрд▓реНрдп рд╣реА рд╣реИред рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдпрд╣ рд╣рдореЗрдВ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ x рд╕реНрдореГрддрд┐ рдореЗрдВ рдПрдХ рдЬрдЧрд╣ рд╣реИ , рдФрд░ рдХреЗрд╡рд▓ рдПрдХ рдирд╛рдо рдирд╣реАрдВ рд╣реИред

рдЖрдк рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЗ рднреАрддрд░ рднреА рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рддрд░рдл, x рд╕реНрдореГрддрд┐ рдореЗрдВ рдПрдХ рд╕реНрдерд╛рди рдХрд╛ рдорд╛рд▓рд┐рдХ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, x рдПрдХ рдЦрд╛рд▓реА рдмреЙрдХреНрд╕ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдкреВрд░реНрдгрд╛рдВрдХ рдорд╛рди рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдЬрдм рдЖрдк x рдХреБрдЫ рдорд╛рди рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдорд╛рди рдХреЛ рдПрдХ рдмреЙрдХреНрд╕ рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВ рдЬреЛ x ред рдпрджрд┐ рдЖрдк рдПрдХ рдирдпрд╛ рдЪрд░ y рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕ рд▓рд╛рдЗрди рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ:

 int y = x; 

рдпрд╣ рдХреЛрдб y рдирд╛рдордХ рдПрдХ рдирдпрд╛ рдмреЙрдХреНрд╕ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ x рд╕реЗ рд╡реИрд▓реНрдпреВ рдХреЛ рдХреЙрдкреА рдХрд░рддрд╛ рд╣реИред рдЕрдм рдореЗрдореЛрд░реА рд╕рд░реНрдХрд┐рдЯ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:



рдирдП рд╕реНрдерд╛рди рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ y - 0x7f5 ред рдпрджреНрдпрдкрд┐ рдорд╛рди x рдХреЛ x рдХреЙрдкреА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЪрд░ y рд╕реНрдореГрддрд┐ рдореЗрдВ рдПрдХ рдирдпрд╛ рдкрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЖрдк x рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ y рдХреЗ рдореВрд▓реНрдп рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 y = 2339; 

рдЕрдм рдореЗрдореЛрд░реА рд╕рд░реНрдХрд┐рдЯ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:



рдореИрдВ рджреЛрд╣рд░рд╛рддрд╛ рд╣реВрдВ: рдЖрдкрдиреЗ y рдХрд╛ рдорд╛рди рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕реНрдерд╛рди рдирд╣реАрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдкрдиреЗ рдореВрд▓ рдЪрд░ x рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ред

рдкрд╛рдпрдерди рдореЗрдВ рдирд╛рдореЛрдВ рдХреЗ рд╕рд╛рде, рд╕реНрдерд┐рддрд┐ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╣реИред

рдкрд╛рдпрдерди рдореЗрдВ рдирд╛рдо


рдкрд╛рдЗрдерди рдореЗрдВ рдХреЛрдИ рдЪрд░ рдирд╣реАрдВ рд╣реИрдВ, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдирд╛рдо рд╣реИрдВред рдЖрдк рдЕрдкрдиреЗ рд╡рд┐рд╡реЗрдХрд╛рдиреБрд╕рд╛рд░ "рдЪрд░" рд╢рдмреНрдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЪрд░ рдФрд░ рдирд╛рдореЛрдВ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдЬрд╛рдирдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред

рдЖрдЗрдП рдЙрдкрд░реЛрдХреНрдд C рдЙрджрд╛рд╣рд░рдг рд╕реЗ рд╕рдорд╛рди рдХреЛрдб рд▓реЗрдВ рдФрд░ рдЗрд╕реЗ Python рдореЗрдВ рд▓рд┐рдЦреЗрдВ:

 >>> x = 2337 

рд╕реА рдореЗрдВ рдХреЗ рд░реВрдк рдореЗрдВ, рдХреЛрдб рдЗрд╕ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЪрд░рдгреЛрдВ рд╕реЗ рдЧреБрдЬрд░рддрд╛ рд╣реИ:

  1. PyObject рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
  2. PyObject рдХреЗ рд▓рд┐рдП рдирдВрдмрд░ рдХреЛ рдПрдХ рдЯрд╛рдЗрдкрдмреЙрдХреНрд╕ рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рд╣реИред
  3. 2337 PyObject рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╛рди рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
  4. x рдирд╛рдо рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
  5. x рдирдП PyObject рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддрд╛ рд╣реИред
  6. PyObject рдХреА рд╕рдВрджрд░реНрдн рдЧрдгрдирд╛ 1 рд╕реЗ рдмрдврд╝рд╛рдИ рдЧрдИ рд╣реИред

рдиреЛрдЯ : PyObject Python рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рдорд╛рди рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдЗрдХрд╛рдИ CPython рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИ рдФрд░ рд╕рднреА Python рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреА рдореВрд▓ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред

PyObject рдХреЛ рдПрдХ C- рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдк рдЖрд╢реНрдЪрд░реНрдп рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рд╕реАрдзреЗ рдЯрд╛рдЗрдкрдмреЙрдХреНрд╕ рдпрд╛ рд╕рдВрджрд░реНрдн рдХрд╛рдЙрдВрдЯрд░ рдХреЛ рдХреЙрд▓ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕рдВрд░рдЪрдирд╛рдУрдВ рддрдХ рд╕реАрдзреА рдкрд╣реБрдВрдЪ рдирд╣реАрдВ рд╣реИред Sys.getrefcount () рдЬреИрд╕реА рдХреЙрд▓рд┐рдВрдЧ рдкрджреНрдзрддрд┐рдпрд╛рдБ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрдВрддрд░рд┐рдХ рд╕рд╛рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддреА рд╣реИрдВред

рдпрджрд┐ рд╣рдо рд╕реНрдореГрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:



рдпрд╣рд╛рдБ, рдКрдкрд░ рджрд┐рдЦрд╛рдП рдЧрдП C рдореЗрдВ рд╕рд░реНрдХрд┐рдЯ рд╕реЗ рдореЗрдореЛрд░реА рд╕рд░реНрдХрд┐рдЯ рдмрд╣реБрдд рдЕрд▓рдЧ рд╣реИред 2337 рдорд╛рди рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕реНрдореГрддрд┐ рдХрд╛ рдПрдХ рдЦрдВрдб рд╣реЛрдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдПрдХ рдирдпрд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдкрд╛рдпрдерди рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реНрдореГрддрд┐ рдХрд╛ рд╕реНрд╡рд╛рдореА рд╣реИ рдЬреЛ 2337 рд░рд╣рддрд╛ рд╣реИред рдкрд╛рдпрдерди рдирд╛рдо x рд╕реНрдореГрддрд┐ рдореЗрдВ рд╕реАрдзреЗ рдХрд┐рд╕реА рднреА рдкрддреЗ рдХрд╛ рдорд╛рд▓рд┐рдХ рдирд╣реАрдВ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдПрдХ рд╕реА рд╡реИрд░рд┐рдПрдмрд▓ рдПрдХ рд╕реНрдерд┐рд░ рд╕реЗрд▓ рдХрд╛ рдорд╛рд▓рд┐рдХ рд╣реИред

рдпрджрд┐ рдЖрдк x рдирдпрд╛ рдорд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕ рдХреЛрдб рдХреЛ рдЖрдЬрд╝рдорд╛рдПрдБ:

 >>> x = 2338 

рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рд╕реА рдореЗрдВ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ, рдЙрд╕рд╕реЗ рдЕрд▓рдЧ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдкрд╛рдпрдерди рдореЗрдВ рдореВрд▓ рдмрд╛рдБрдз рд╕реЗ рдмрд╣реБрдд рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

рдЗрд╕ рдХреЛрдб рдореЗрдВ:

  • рдПрдХ рдирдпрд╛ PyObject рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
  • PyObject рдХреЗ рд▓рд┐рдП рдирдВрдмрд░ рдХреЛ рдПрдХ рдЯрд╛рдЗрдкрдмреЙрдХреНрд╕ рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рд╣реИред
  • 2 PyObject рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╛рди рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
  • x рдирдП PyObject рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддрд╛ рд╣реИред
  • рдирдП PyObject рдХреА рд╕рдВрджрд░реНрдн рдЧрдгрдирд╛ 1 рд╕реЗ рдмрдврд╝рд╛рдИ рдЧрдИ рд╣реИред
  • рдкреБрд░рд╛рдиреЗ PyObject рдХреА рд╕рдВрджрд░реНрдн рд╕рдВрдЦреНрдпрд╛ 1 рд╕реЗ рдХрдо рд╣реЛ рдЧрдИ рд╣реИред

рдЕрдм рдореЗрдореЛрд░реА рд╕рд░реНрдХрд┐рдЯ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:



рдпрд╣ рдЪрд┐рддреНрд░рдг рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ x рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкрд╣рд▓реЗ рдХреА рддрд░рд╣ рд╕реНрдореГрддрд┐ рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдорд╛рд▓рд┐рдХ рдирд╣реАрдВ рд╣реИред рдЖрдк рдпрд╣ рднреА рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХрдорд╛рдВрдб x = 2338 рдПрдХ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рд▓рд┐рдВрдХ рдХреЗ рдирд╛рдо x рдХрд╛ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкрд┐рдЫрд▓реА рдСрдмреНрдЬреЗрдХреНрдЯ (рдорд╛рди 2337 рдпреБрдХреНрдд) рдЕрдм 0 рдХреА рд╕рдВрджрд░реНрдн рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдореЗрдореЛрд░реА рдореЗрдВ рд╣реИ, рдФрд░ рдХрдЪрд░рд╛ рдХрд▓реЗрдХреНрдЯрд░ рджреНрд╡рд╛рд░рд╛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдЖрдк рдПрдХ рдирдпрд╛ рдирд╛рдо y рджрд░реНрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ C рдЙрджрд╛рд╣рд░рдг рдореЗрдВ:

 >>> y = x 

рдПрдХ рдирдпрд╛ рдирд╛рдо рд╕реНрдореГрддрд┐ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛, рд▓реЗрдХрд┐рди рдЬрд░реВрд░реА рдирд╣реАрдВ рдХрд┐ рдПрдХ рдирдИ рд╡рд╕реНрддреБ:



рдЕрдм рдЖрдк рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рдирдпрд╛ рдкрд╛рдпрдерди рдСрдмреНрдЬреЗрдХреНрдЯ рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХреЗрд╡рд▓ рдПрдХ рдирдпрд╛ рдирд╛рдо рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рдЙрд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдСрдмреНрдЬреЗрдХреНрдЯ рд╕рдВрджрд░реНрдн рдХрд╛рдЙрдВрдЯрд░ рдореЗрдВ 1. рд╡реГрджреНрдзрд┐ рд╣реБрдИ рд╣реИред рдЖрдк рдЙрдирдХреА рдкрд╣рдЪрд╛рди рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╕реНрддреБрдУрдВ рдХреА рдкрд╣рдЪрд╛рди рдХреА рддреБрд▓реНрдпрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 >>> y is x True 

рдпрд╣ рдХреЛрдб рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ x рдФрд░ y рдПрдХ рд╡рд╕реНрддреБ рд╣реИрдВред рд▓реЗрдХрд┐рди рдХреЛрдИ рдЧрд▓рддреА рди рдХрд░реЗрдВ: y рдЕрднреА рднреА рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк y рд╕рд╛рде рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдСрдкрд░реЗрд╢рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 >>> y += 1 >>> y is x False 

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЖрдк рдПрдХ рдирдпрд╛ рдкрд╛рдпрдерди рдСрдмреНрдЬреЗрдХреНрдЯ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрдВрдЧреЗред рдЕрдм рд╕реНрдореГрддрд┐ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ:



рдПрдХ рдирдИ рд╡рд╕реНрддреБ рдмрдирд╛рдИ рдЧрдИ рд╣реИ, рдФрд░ y рдЕрдм рдЗрд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЙрддреНрд╕реБрдХ рд╣реИ рдХрд┐ рдЕрдЧрд░ рд╣рдо рд╕реАрдзреЗ рд╕реАрдзреЗ y рд╕реЗ 2339 рддреЛ рд╣рдореЗрдВ рд╡рд╣реА рдЕрдВрддрд┐рдо рд╕реНрдерд┐рддрд┐ рдорд┐рд▓реЗрдЧреАред

 >>> y = 2339 

рдЗрд╕ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдмрд╛рдж, рд╣рдо рд╕реНрдореГрддрд┐ рдХреА рдРрд╕реА рдЕрдВрддрд┐рдо рд╕реНрдерд┐рддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдВрдЪрд╛рд▓рди рдореЗрдВред рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛ рджреВрдВ рдХрд┐ рдкрд╛рдпрдерди рдореЗрдВ рдЖрдк рд╡реИрд░рд┐рдПрдмрд▓ рдЕрд╕рд╛рдЗрди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдирд╛рдореЛрдВ рдХреЛ рд▓рд┐рдВрдХ рд╕реЗ рдмрд╛рдВрдзрддреЗ рд╣реИрдВред

рдкрд╛рдпрдерди рдореЗрдВ рдЗрдВрдЯрд░реНрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ


рдЕрдм рдЖрдк рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ рдкрд╛рдпрдерди рдореЗрдВ рдирдИ рд╡рд╕реНрддреБрдПрдВ рдХреИрд╕реЗ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИрдВ рдФрд░ рдЙрдирд╕реЗ рдХреИрд╕реЗ рдирд╛рдо рдЬреБрдбрд╝реЗ рд╣реЛрддреЗ рд╣реИрдВред рдпрд╣ рдЖрдВрддрд░рд┐рдХ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдпрд╣ рдкрд╛рдпрдерди рдХреЛрдб рд╣реИ:

 >>> x = 1000 >>> y = 1000 >>> x is y True 

рдкрд╣рд▓реЗ рдХреА рддрд░рд╣, x рдФрд░ y рд╕рдорд╛рди рдкрд╛рдпрдерди рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдирд╛рдо рд╣реИрдВред рд▓реЗрдХрд┐рди 1000 рдорд╛рди рд╡рд╛рд▓реЗ рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рд╣рдореЗрд╢рд╛ рдПрдХ рд╣реА рдореЗрдореЛрд░реА рдПрдбреНрд░реЗрд╕ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рджреЛ рдирдВрдмрд░ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ 1000 рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдПрдХ рдФрд░ рдкрддрд╛ рдорд┐рд▓реЗрдЧрд╛:

 >>> x = 1000 >>> y = 499 + 501 >>> x is y False 

рдЗрд╕ рдмрд╛рд░, рд╕реНрдЯреНрд░рд┐рдВрдЧ x is y рд░рд┐рдЯрд░реНрди False ред рдЕрдЧрд░ рдЖрдк рд╢рд░реНрдорд┐рдВрджрд╛ рд╣реИрдВ, рддреЛ рдЪрд┐рдВрддрд╛ рди рдХрд░реЗрдВред рдЗрд╕ рдХреЛрдб рдХреЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдиреЗ рдкрд░ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ:

  1. рдПрдХ рдкрд╛рдпрдерди рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ( 1000 )ред
  2. рдЗрд╕реЗ x рдирд╛рдо рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
  3. рдПрдХ рдкрд╛рдпрдерди рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ ( 499 )ред
  4. рдПрдХ рдкрд╛рдпрдерди рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ ( 501 )ред
  5. рдЗрди рджреЛ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред
  6. рдПрдХ рдирдпрд╛ рдкрд╛рдпрдерди рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ ( 1000 )ред
  7. рдЙрд╕реЗ y рдирд╛рдо рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рддрдХрдиреАрдХреА рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг : рд╡рд░реНрдгрд┐рдд рдЪрд░рдг рдХреЗрд╡рд▓ рддрднреА рд╣реЛрддреЗ рд╣реИрдВ рдЬрдм рдЗрд╕ рдХреЛрдб рдХреЛ рдЖрд░рдИрдкреАрдПрд▓ рдХреЗ рдЕрдВрджрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕реЗ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкреЗрд╕реНрдЯ рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдЪрд▓рд╛рдПрдВ, рдлрд┐рд░ рд▓рд╛рдЗрди x is y , True рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧреАред

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

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

рдкрд╛рдпрдерди рдХреЗ рд░рдЪрдирд╛рдХрд╛рд░реЛрдВ рдиреЗ рд╕рдордЭрджрд╛рд░реА рд╕реЗ рдЗрд╕ рдУрд╡рд░рд╣реЗрдб рдХреЛ рджреЗрдЦрд╛ рдФрд░ рдХрдИ рдЕрдиреБрдХреВрд▓рди рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдЙрдирдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ рдЬреЛ рд╢реБрд░реБрдЖрддреА рд▓реЛрдЧреЛрдВ рдХреЛ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ:

 >>> x = 20 >>> y = 19 + 1 >>> x is y True 

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдХреЛрдб рд▓рдЧрднрдЧ рдКрдкрд░ рдЬреИрд╕рд╛ рд╣реА рд╣реИ, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рд╣рдореЗрдВ True рдорд┐рд▓рддрд╛ рд╣реИред рдпрд╣ рд╕рдм рдирдЬрд░рдмрдВрдж рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред рдкрд╛рдпрдерди рд╕реНрдореГрддрд┐ рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрдк-рд╕рдореВрд╣ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд░реЛрдЬрдорд░реНрд░рд╛ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╡реИрд╢реНрд╡рд┐рдХ рдирд╛рдорд╕реНрдерд╛рди рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред

рдкрд╛рдпрдерди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд┐рди рд╡рд╕реНрддреБрдУрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ? CPython 3.7 рдореЗрдВ, рдкреНрд░рд╢рд┐рдХреНрд╖реБ рд╣реИрдВ:

  1. -5 рд╕реЗ 256 рддрдХ рдХреЗ 256 ред
  2. рдХреЗрд╡рд▓ ASCII рдЕрдХреНрд╖рд░, рд╕рдВрдЦреНрдпрд╛ рдпрд╛ рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рд╡рд╛рд▓реЗ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ред

рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпреЗ рдЪрд░ рдХрдИ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдореЗрдВ рдЕрдХреНрд╕рд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЗрдВрдЯрд░реНрдирд┐рдВрдЧ рдХрд░рдХреЗ, рдкрд╛рдпрдерди рд▓рдЧрд╛рддрд╛рд░ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдореГрддрд┐ рдЖрд╡рдВрдЯрди рдХреЛ рд░реЛрдХрддрд╛ рд╣реИред

рдЖрдХрд╛рд░ рдореЗрдВ 20 рд╕реЗ рдХрдо рд╡рд░реНрдгреЛрдВ рд╡рд╛рд▓реА рд▓рд╛рдЗрдиреЗрдВ рдФрд░ ASCII рдЕрдХреНрд╖рд░, рд╕рдВрдЦреНрдпрд╛ рдпрд╛ рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдиреНрд╣реЗрдВ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:

 >>> s1 = "realpython" >>> id(s1) 140696485006960 >>> s2 = "realpython" >>> id(s2) 140696485006960 >>> s1 is s2 True 

рдпрд╣рд╛рдБ s1 рдФрд░ s2 рд╕реНрдореГрддрд┐ рдореЗрдВ рд╕рдорд╛рди рдкрддреЗ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рд╣рдо рдПрдХ ASCII рдкрддреНрд░, рд╕рдВрдЦреНрдпрд╛ рдпрд╛ рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдирд╣реАрдВ рдбрд╛рд▓рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓реЗрдЧрд╛:

 >>> s1 = "Real Python!" >>> s2 = "Real Python!" >>> s1 is s2 False 

рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдПрдХ рд╡рд┐рд╕реНрдордпрд╛рджрд┐рдмреЛрдзрдХ рдмрд┐рдВрджреБ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рддрд╛рд░ рдХреЛ рдирдЬрд░рдмрдВрдж рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╕реНрдореГрддрд┐ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реЛрддреЗ рд╣реИрдВред

рдмреЛрдирд╕ : рдпрджрд┐ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдпреЗ рд╡рд╕реНрддреБрдПрдВ рдЙрд╕реА рдЖрдВрддрд░рд┐рдХ рд╡рд╕реНрддреБ рдХреЛ рджреЗрдЦреЗрдВ, рддреЛ рдЖрдк sys.intern() рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИ:

рд╢рдмреНрджрдХреЛрд╢ рдЦреЛрдЬ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдереЛрдбрд╝реА рд╡реГрджреНрдзрд┐ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЗрдВрдЯрд░реНрдирд┐рдВрдЧ рдЙрдкрдпреЛрдЧреА рд╣реИ: рдпрджрд┐ рд╢рдмреНрджрдХреЛрд╢ рдореЗрдВ рдХреБрдВрдЬреА рдФрд░ рдЦреЛрдЬ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдХреБрдВрдЬреА рдХреЛ рдирдЬрд░рдмрдВрдж рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХреБрдВрдЬреА рддреБрд▓рдирд╛ (рд╣реИрд╢рд┐рдВрдЧ рдХреЗ рдмрд╛рдж) рддрд╛рд░ рдХреЗ рдмрдЬрд╛рдп рдмрд┐рдВрджреБрдУрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдХреЗ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред ( рд╕реНрд░реЛрдд )

рдкреНрд░рд╢рд┐рдХреНрд╖рдХ рдЕрдХреНрд╕рд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рднреНрд░рдорд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдмрд╕ рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдпрджрд┐ рдЖрдк рд╕рдВрджреЗрд╣ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╣рдореЗрд╢рд╛ id() рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╡рд╕реНрддреБрдУрдВ рдХреА рд╕рдорд╛рдирддрд╛ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдкрд╛рдпрдерди рдкреЙрдЗрдВрдЯрд░ рдЗрдореНрдпреВрд▓реЗрд╢рди


рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдкрд╛рдпрдерди рдореЗрдВ рдореВрд▓ рд░реВрдк рд╕реЗ рдЕрдиреБрдкрд╕реНрдерд┐рдд рдмрд┐рдВрджреБрдУрдВ рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХрд╛ рд▓рд╛рдн рдирд╣реАрдВ рдЙрдард╛ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд╛рдпрдерди рдореЗрдВ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рд╣рдо рдЙрдирдореЗрдВ рд╕реЗ рджреЛ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ:

  1. рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
  2. рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рддреИрдпрд╛рд░ рдкрд╛рдпрдерди рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред

рдореНрдпреВрдЯреЗрдмрд▓ рдЯрд╛рдЗрдк рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ


рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рдкреНрд░рдХрд╛рд░ рд╣реИрдВред рдпрд╣ рдЙрдирдХреА рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓рддрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рд╣реИ рдХрд┐ рд╣рдо рд╕рдВрдХреЗрдд рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдкрдХреЛ рдЗрд╕ рдХреЛрдб рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

 void add_one(int *x) { *x += 1; } 

рдпрд╣ рдХреЛрдб рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдПрдХ рд╕рдВрдЦреНрдпрд╛ ( *x ) рддрдХ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ 1 рд╕реЗ рдореВрд▓реНрдп рдмрдврд╝рд╛рддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдореБрдЦреНрдп рдХрд╛рд░реНрдп рд╣реИ:

 #include <stdi.h> int main(void) { int y = 2337; printf("y = %d\n", y); add_one(&y); printf("y = %d\n", y); return 0; } 

рдЙрдкрд░реЛрдХреНрдд рдЦрдВрдб рдореЗрдВ, рд╣рдордиреЗ y рдХреЛ 2337 рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛, рд╡рд░реНрддрдорд╛рди рдорд╛рди рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛, рдЗрд╕реЗ 1 рд╕реЗ рдмрдврд╝рд╛рдпрд╛, рдФрд░ рдлрд┐рд░ рдПрдХ рдирдпрд╛ рдорд╛рди рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реНрдХреНрд░реАрди рдкрд░ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ:

 y = 2337 y = 2338 

рдкрд╛рдпрдерди рдореЗрдВ рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ рдПрдХ рдкрд░рд╕реНрдкрд░ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕реВрдЪреА рд▓рд╛рдЧреВ рдХрд░реЗрдВ рдФрд░ рдкрд╣рд▓рд╛ рддрддреНрд╡ рдмрджрд▓реЗрдВ:

 >>> def add_one(x): ... x[0] += 1 ... >>> y = [2337] >>> add_one(y) >>> y[0] 2338 

рдпрд╣рд╛рдБ add_one(x) рдкрд╣рд▓реЗ рддрддреНрд╡ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ 1 рд╕реЗ рдЗрд╕рдХреЗ рдореВрд▓реНрдп рдХреЛ рдмрдврд╝рд╛рддрд╛ рд╣реИред рд╕реВрдЪреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╣рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдореВрд▓реНрдп рдорд┐рд▓рддрд╛ рд╣реИред рддреЛ рдкрд╛рдпрдерди рдореЗрдВ рд╕рдВрдХреЗрдд рд╣реИрдВ? рдирд╣реАрдВред рд╡рд░реНрдгрд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╕рдВрднрд╡ рд╣реЛ рдЧрдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рд╕реВрдЪреА рдПрдХ рдЙрддреНрдкрд░рд┐рд╡рд░реНрддреА рдкреНрд░рдХрд╛рд░ рд╣реИред рдпрджрд┐ рдЖрдк рдПрдХ рдЯрдкрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ:

 >>> z = (2337,) >>> add_one(z) 

рдмреИрдХ рдЯреНрд░реЗрд╕ (рд╕рдмрд╕реЗ рд╣рд╛рд▓рд┐рдпрд╛ рдХреЙрд▓ рдЕрдВрддрд┐рдо рдЪрд▓рддреЗ рд╣реИрдВ):

  File "<stdin>", line 1, in <module> File "<stdin>", line 2, in add_one TypeError: 'tuple' object does not support item assignment 

рдпрд╣ рдХреЛрдб рдЯрдкрд▓ рдХреА рдЕрдкрд░рд┐рд╣рд╛рд░реНрдпрддрд╛ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рддрддреНрд╡ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

list рдХреЗрд╡рд▓ рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдкреНрд░рдХрд╛рд░ рдирд╣реАрдВ рд╣реИ, рд╣рд┐рд╕реНрд╕рд╛ рд╕реВрдЪрдХ рднреА рддрд╛рдирд╛рд╢рд╛рд╣ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдиреБрдХрд░рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

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

 >>> counters = {"func_calls": 0} >>> def bar(): ... counters["func_calls"] += 1 ... >>> def foo(): ... counters["func_calls"] += 1 ... bar() ... >>> foo() >>> counters["func_calls"] 2 

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдлрд╝рдВрдХреНрд╢рди рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢рдмреНрджрдХреЛрд╢ рдХрд╛рдЙрдВрдЯрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред foo() рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж foo() рдХрд╛рдЙрдВрдЯрд░ рдореЗрдВ рдЙрдореНрдореАрдж рдХреЗ foo() 2 рдХреА рд╡реГрджреНрдзрд┐ рд╣реБрдИред рдФрд░ рд╕рднреА dict рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рдордд рднреВрд▓реЛ, рдпрд╣ рдХреЗрд╡рд▓ рд╕реВрдЪрдХ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдПрдХ рдЕрдиреБрдХрд░рдг рд╣реИ, рдЗрд╕рдХрд╛ рд╕реА рдФрд░ рд╕реА ++ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдВрдХреЗрдд рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рдирд╣реАрдВ рд╣реИред рд╣рдо рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЗрди рдСрдкрд░реЗрд╢рдиреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдорд╣рдВрдЧрд╛ рд╣реИ рдЕрдЧрд░ рд╡реЗ рд╕реА рдпрд╛ рд╕реА ++ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдП рдЧрдП рдереЗред

рдкрд╛рдпрдерди рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛


рдкрд╛рдЗрдерди рдореЗрдВ рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП dict рдПрдХ рд╢рд╛рдирджрд╛рд░ рддрд░реАрдХрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрднреА-рдХрднреА рдпрд╣ рдпрд╛рдж рд░рдЦрдирд╛ рдХрдард┐рди рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдХрд┐рд╕ рдкреНрд░рдореБрдЦ рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИред рдЦрд╛рд╕рдХрд░ рдпрджрд┐ рдЖрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╣рд┐рд╕реНрд╕реЛрдВ рдореЗрдВ рд╢рдмреНрджрдХреЛрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдПрдХ рдХрд╕реНрдЯрдо рдкрд╛рдпрдерди рд╡рд░реНрдЧ рдпрд╣рд╛рдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред

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

 class Metrics(object): def __init__(self): self._metrics = { "func_calls": 0, "cat_pictures_served": 0, } 

рдпрд╣ рдХреЛрдб Metrics рд╡рд░реНрдЧ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЕрднреА рднреА рдЕрдк-рдЯреВ-рдбреЗрдЯ рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢рдмреНрджрдХреЛрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдХрд┐ _metrics рд╕рджрд╕реНрдп _metrics рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХ рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓рддрд╛ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ред рдЕрдм рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдЗрди рдореВрд▓реНрдпреЛрдВ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЖрдк рдЧреБрдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 class Metrics(object): # ... @property def func_calls(self): return self._metrics["func_calls"] @property def cat_pictures_served(self): return self._metrics["cat_pictures_served"] 

рдпрд╣рд╛рдБ рд╣рдо @property рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдбреЗрдХреЛрд░реЗрдЯрд░ рдХреЗ рд▓рд┐рдП рдирдП рд╣реИрдВ, рддреЛ рдкрд╛рдпрдерди рдбреЗрдХреЛрд░реЗрдЯрд░реНрд╕ рд▓реЗрдЦ рдкрд░ рдкреНрд░рд╛рдЗрдорд░ рдкрдврд╝реЗрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, @property рдбреЗрдХреЛрд░реЗрдЯрд░ рдЖрдкрдХреЛ func_calls рдФрд░ cat_pictures_served рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рд╡реЗ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдереЗ:

 >>> metrics = Metrics() >>> metrics.func_calls 0 >>> metrics.cat_pictures_served 0 

рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдЗрди рдирд╛рдореЛрдВ рдХреЛ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕ рддрдереНрдп рд╕реЗ рдЕрдореВрд░реНрдд рд╣реИрдВ рдХрд┐ рдпреЗ рдорд╛рди рд╢рдмреНрджрдХреЛрд╢ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╛рдореЛрдВ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВред рдмреЗрд╢рдХ, рдЖрдкрдХреЛ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдмрдврд╝рд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:

 class Metrics(object): # ... def inc_func_calls(self): self._metrics["func_calls"] += 1 def inc_cat_pics(self): self._metrics["cat_pictures_served"] += 1 

:

  1. inc_func_calls()
  2. inc_cat_pics()

metrics . , , :

 >>> metrics = Metrics() >>> metrics.inc_func_calls() >>> metrics.inc_func_calls() >>> metrics.func_calls 2 

func_calls inc_func_calls() Python. , - metrics , .

: , inc_func_calls() inc_cat_pics() @property.setter int , .

Metrics :

 class Metrics(object): def __init__(self): self._metrics = { "func_calls": 0, "cat_pictures_served": 0, } @property def func_calls(self): return self._metrics["func_calls"] @property def cat_pictures_served(self): return self._metrics["cat_pictures_served"] def inc_func_calls(self): self._metrics["func_calls"] += 1 def inc_cat_pics(self): self._metrics["cat_pictures_served"] += 1 

ctypes


, - Python, CPython? ctypes , C. ctypes, Extending Python With C Libraries and the ┬лctypes┬╗ Module .

, , . - add_one() :

 void add_one(int *x) { *x += 1; } 

, x 1. , (shared) . , add.c , gcc:

 $ gcc -c -Wall -Werror -fpic add.c $ gcc -shared -o libadd1.so add.o 

C add.o . libadd1.so .

libadd1.so . ctypes Python:

 >>> import ctypes >>> add_lib = ctypes.CDLL("./libadd1.so") >>> add_lib.add_one <_FuncPtr object at 0x7f9f3b8852a0> 

ctypes.CDLL , libadd1 . add_one() , , Python-. , . Python , .

, ctypes :

 >>> add_one = add_lib.add_one >>> add_one.argtypes = [ctypes.POINTER(ctypes.c_int)] 

, C. , , :

 >>> add_one(1) Traceback (most recent call last): File "<stdin>", line 1, in <module> ctypes.ArgumentError: argument 1: <class 'TypeError'>: \ expected LP_c_int instance instead of int 

Python , add_one() , . , ctypes . :

 >>> x = ctypes.c_int() >>> x c_int(0) 

x 0 . ctypes byref() , .

: .

, . , .

add_one() :

 >>> add_one(ctypes.byref(x)) 998793640 >>> x c_int(1) 

рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛! 1. , Python .

рдирд┐рд╖реНрдХрд░реНрд╖


Python . , Python.

Python:

  • .
  • Python- .
  • ctypes.

Python .

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


All Articles