рд╣рд╛рдп рд╣рдмреНрд░ред
рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЬрд╣рд╛рдВ рдПрдХ рдмрдбрд╝реА рдЧрддрд┐рд╢реАрд▓ рд╕реВрдЪреА рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдирд╛ рдФрд░ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛, рдкрд░реАрдХреНрд╖рдХ рд╕реНрдореГрддрд┐ рдХреА рдХрдореА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢рд┐рдХрд╛рдпрдд рдХрд░рдиреЗ рд▓рдЧреЗред рдХреЛрдб рдХреА рдХреЗрд╡рд▓ рдПрдХ рдкрдВрдХреНрддрд┐ рдЬреЛрдбрд╝рдХрд░ "рдереЛрдбрд╝рд╛ рд░рдХреНрдд" рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕рд░рд▓ рддрд░реАрдХрд╛ рдиреАрдЪреЗ рд╡рд░реНрдгрд┐рдд рд╣реИред рддрд╕реНрд╡реАрд░ рдореЗрдВ рдкрд░рд┐рдгрд╛рдо:

рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдХрдЯ рдХреЗ рдиреАрдЪреЗ рдЬрд╛рд░реА рд░рд╣рд╛ред
рдПрдХ рд╕рд╛рдзрд╛рд░рдг "рдкреНрд░рд╢рд┐рдХреНрд╖рдг" рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ - рдПрдХ рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
рд╡реНрдпрдХреНрддрд┐рдЧрдд рдбреЗрдЯрд╛ рдпреБрдХреНрдд DataItem рд╡рд░реНрдЧ рдмрдирд╛рдПрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд╛рдо, рдЖрдпреБ рдФрд░ рдкрддрд╛ред
class DataItem(object): def __init__(self, name, age, address): self.name = name self.age = age self.address = address
"рдмрдЪреНрдЪреЛрдВ рдХрд╛" рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреА рд╡рд╕реНрддреБ рд╕реНрдореГрддрд┐ рдореЗрдВ рдХрд┐рддрдирд╛ рд▓реЗрддреА рд╣реИ?
рдЪрд▓реЛ рдорд╛рдереЗ рдореЗрдВ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:
d1 = DataItem("Alex", 42, "-") print ("sys.getsizeof(d1):", sys.getsizeof(d1))
рд╣рдореЗрдВ 56 рдмрд╛рдЗрдЯреНрд╕ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдорд┐рд▓рддреА рд╣реИред рдпрд╣ рдереЛрдбрд╝рд╛ рд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ, рдХрд╛рдлреА рд╕рдВрддреБрд╖реНрдЯ рд╣реИред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╣рдо рдХрд┐рд╕реА рдЕрдиреНрдп рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рдЬрд╛рдБрдЪ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдЕрдзрд┐рдХ рдбреЗрдЯрд╛ рд╣реИ:
d2 = DataItem("Boris", 24, "In the middle of nowhere") print ("sys.getsizeof(d2):", sys.getsizeof(d2))
рдЙрддреНрддрд░ рдлрд┐рд░ рд╕реЗ 56 рд╣реИред рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░, рд╣рдо рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ рдХреБрдЫ рдпрд╣рд╛рдБ рдареАрдХ рдирд╣реАрдВ рд╣реИ, рдФрд░ рд╕рдм рдХреБрдЫ рдЙрддрдирд╛ рд╕рд░рд▓ рдирд╣реАрдВ рд╣реИ рдЬрд┐рддрдирд╛ рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ рд▓рдЧрддрд╛ рд╣реИред
рдЕрдВрддрд░реНрдЬреНрдЮрд╛рди рд╣рдореЗрдВ рд╡рд┐рдлрд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╕рдм рдХреБрдЫ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрддрдирд╛ рд╕рд░рд▓ рдирд╣реАрдВ рд╣реИред рдкрд╛рдпрдерди рдЧрддрд┐рд╢реАрд▓ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдПрдХ рдмрд╣реБрдд рд╣реА рд▓рдЪреАрд▓реА рднрд╛рд╖рд╛ рд╣реИ, рдФрд░ рдЕрдкрдиреЗ рдХрд╛рдо рдХреЗ рд▓рд┐рдП, рдпрд╣ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред рдЬреЛ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИред рдмрд╕ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, sys.getizeof ("") 33 рдХреЛ рд▓реМрдЯрд╛рдПрдЧрд╛ - рд╣рд╛рдБ, 33 рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рдЗрдЯреНрд╕ рдкреНрд░рддрд┐ рд░рд┐рдХреНрдд рд░реЗрдЦрд╛ рдХреЗ рд░реВрдк рдореЗрдВ! рдФрд░ sys.getsizeof (1) рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рдХреЗ рд▓рд┐рдП 24 - 24 рдмрд╛рдЗрдЯреНрд╕ рд▓реМрдЯрд╛рдПрдЧрд╛ (рдореИрдВ рд╕реА рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рд╕реНрдХреНрд░реАрди рд╕реЗ рджреВрд░ рдЬрд╛рдиреЗ рдФрд░ рдЖрдЧреЗ рдирд╣реАрдВ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реВрдВ, рддрд╛рдХрд┐ рд╕реБрдВрджрд░ рдореЗрдВ рд╡рд┐рд╢реНрд╡рд╛рд╕ рди рдЦреЛрдПрдВ)ред рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП, рдЬреИрд╕реЗ рдХрд┐ рдПрдХ рд╢рдмреНрджрдХреЛрд╢, sys.getsizeof (рддрд╛рдирд╛рд╢рд╛рд╣) (27) рдмрд╛рдЗрдЯреНрд╕ рд▓реМрдЯрд╛рдПрдЧрд╛ - рдФрд░ рдпрд╣ рдПрдХ
рдЦрд╛рд▓реА рд╢рдмреНрджрдХреЛрд╢ рдХреЗ рд▓рд┐рдП рд╣реИред рдореИрдВрдиреЗ рдЖрдЧреЗ рдЬрд╛рд░реА рдирд╣реАрдВ рд░рдЦрд╛, рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рд╕рд┐рджреНрдзрд╛рдВрдд рд╕реНрдкрд╖реНрдЯ рд╣реИ,
рдФрд░ рд░реИрдо рдирд┐рд░реНрдорд╛рддрд╛рдУрдВ рдХреЛ рдЕрдкрдиреЗ рдЪрд┐рдкреНрд╕ рдмреЗрдЪрдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ред
рд▓реЗрдХрд┐рди рд╡рд╛рдкрд╕ рд╣рдорд╛рд░реЗ DataItem рд╡рд░реНрдЧ рдФрд░ "рдмрдЪреНрдЪреЗ" рд╕рд╡рд╛рд▓ рдкрд░ред рдРрд╕реА рдХрдХреНрд╖рд╛ рдХреЛ рд╕реНрдореГрддрд┐ рдореЗрдВ рдХрд┐рддрдирд╛ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИ? рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдирд┐рдореНрди рд╕реНрддрд░ рдкрд░ рдХрдХреНрд╖рд╛ рдХреА рд╕рдВрдкреВрд░реНрдг рд╕рд╛рдордЧреНрд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ:
def dump(obj): for attr in dir(obj): print(" obj.%s = %r" % (attr, getattr(obj, attr)))
рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рджрд┐рдЦрд╛рдПрдЧрд╛ рдХрд┐ "рд╣реБрдб рдХреЗ рдиреАрдЪреЗ" рдХреНрдпрд╛ рдЫрд┐рдкрд╛ рд╣реБрдЖ рд╣реИ рддрд╛рдХрд┐ рд╕рднреА рдкрд╛рдпрдерди рдлрд╝рдВрдХреНрд╢рди (рдЯрд╛рдЗрдкрд┐рдВрдЧ, рдЗрдирд╣реЗрд░рд┐рдЯреЗрдВрд╕ рдФрд░ рдЕрдиреНрдп рдЙрдкрд╣рд╛рд░) рдХрд╛рд░реНрдп рдХрд░ рд╕рдХреЗрдВред
рдкрд░рд┐рдгрд╛рдо рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рд╣реИ:

рдпрд╣ рд╕рдм рдХрд┐рддрдирд╛ рд▓реЗрддреА рд╣реИ? рдЧрд┐рддреБрдм рдкрд░ рдПрдХ рдРрд╕рд╛ рдлрд╝рдВрдХреНрд╢рди рдерд╛ рдЬреЛ рдбреЗрдЯрд╛ рдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдорд╛рддреНрд░рд╛ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ, рд╕рднреА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рдкреБрди: рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдЧреЗрдЯрд┐рд╕реЛрдлрд╝ рдХрд╣рддрд╛ рд╣реИред
def get_size(obj, seen=None):
рд╣рдо рдЗрд╕реЗ рдЖрдЬрдорд╛рддреЗ рд╣реИрдВ:
d1 = DataItem("Alex", 42, "-") print ("get_size(d1):", get_size(d1)) d2 = DataItem("Boris", 24, "In the middle of nowhere") print ("get_size(d2):", get_size(d2))
рд╣рдореЗрдВ рдХреНрд░рдорд╢рдГ рекремреж рдФрд░ рек4рек рдмрд╛рдЗрдЯреНрд╕ рдорд┐рд▓рддреЗ рд╣реИрдВ, рдЬреЛ рд╕рддреНрдп рдХреА рддрд░рд╣ рдЕрдзрд┐рдХ рд╣реИред
рдЗрд╕ рдХрд╛рд░реНрдп рдХреЗ рдмрд╛рдж, рдХрдИ рдкреНрд░рдпреЛрдЧ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рдбреЗрдЯрд╛рдЗрдо рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рд╕реВрдЪреА рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВ рддреЛ рдХрд┐рддрдирд╛ рдбреЗрдЯрд╛ рд▓рдЧреЗрдЧрд╛ред Get_size ([d1]) рдлрд╝рдВрдХреНрд╢рди 532 рдмрд╛рдЗрдЯ рджреЗрддрд╛ рд╣реИ - рдЬрд╛рд╣рд┐рд░ рд╣реИ рдпрд╣ "рд╡рд╣реА" 460 + рдХреБрдЫ рдУрд╡рд░рд╣реЗрдб рд╣реИред рд▓реЗрдХрд┐рди get_size ([d1, d2]) 863 рдмрд╛рдЗрдЯ рд▓реМрдЯрд╛рдПрдЧрд╛ - 460 рд╕реЗ рдХрдо + 484 рдЕрд▓рдЧ рд╕реЗред рдФрд░ рднреА рджрд┐рд▓рдЪрд╕реНрдк get_size ([d1, d2, d1]) рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдо рд╣реИ - рд╣рдореЗрдВ 871 рдмрд╛рдЗрдЯреНрд╕ рдорд┐рд▓рддреЗ рд╣реИрдВ, рдмрд╕ рдереЛрдбрд╝рд╛ рдФрд░, рдЕрд░реНрдерд╛рддреНред рдкрд╛рдпрдерди рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рд╡рд╕реНрддреБ рдХреЗ рд▓рд┐рдП рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕реНрдорд╛рд░реНрдЯ рд╣реИред
рдЕрдм рд╣рдо рдкреНрд░рд╢реНрди рдХреЗ рджреВрд╕рд░реЗ рднрд╛рдЧ рдХреА рдУрд░ рдореБрдбрд╝рддреЗ рд╣реИрдВ - рдХреНрдпрд╛ рдореЗрдореЛрд░реА рдХреА рдЦрдкрдд рдХреЛ рдХрдо рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ? рд╣рд╛рдБ рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкрд╛рдпрдерди рдПрдХ рджреБрднрд╛рд╖рд┐рдпрд╛ рд╣реИ, рдФрд░ рд╣рдо рдХрд┐рд╕реА рднреА рд╕рдордп рдЕрдкрдиреА рдХрдХреНрд╖рд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдирдпрд╛ рдХреНрд╖реЗрддреНрд░ рдЬреЛрдбрд╝реЗрдВ:
d1 = DataItem("Alex", 42, "-") print ("get_size(d1):", get_size(d1)) d1.weight = 66 print ("get_size(d1):", get_size(d1))
рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣рдореЗрдВ рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреА
рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ , рддреЛ рд╣рдо рджреБрднрд╛рд╖рд┐рдпрд╛ рдХреЛ __slots__ рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрдХреНрд╖рд╛ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
class DataItem(object): __slots__ = ['name', 'age', 'address'] def __init__(self, name, age, address): self.name = name self.age = age self.address = address
рдЖрдк рдкреНрд░рд▓реЗрдЦрди (
RTFM ) рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ "__slots__ рд╣рдореЗрдВ рдбреЗрдЯрд╛ рд╕рджрд╕реНрдпреЛрдВ (рдЬреИрд╕реЗ рдЧреБрдг) рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдФрд░ __dict__ рдФрд░ __weakref__ рдХреЗ рдирд┐рд░реНрдорд╛рдг рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред __dict__ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд╣реЗрдЬреЗ рдЧрдП рд╕реНрдерд╛рди
рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ "ред
рдЬрд╛рдБрдЪ рдХрд░реЗрдВ: рд╣рд╛рдБ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, get_size (d1) рд░рд┐рдЯрд░реНрди ... 460 рдХреЗ рдмрдЬрд╛рдп 64 рдмрд╛рдЗрдЯреНрд╕, рдЕрд░реНрдерд╛рддреНред 7 рдЧреБрдирд╛ рдХрдоред рдПрдХ рдмреЛрдирд╕ рдХреЗ рд░реВрдк рдореЗрдВ, рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд▓рдЧрднрдЧ 20% рддреЗрдЬреА рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рд▓реЗрдЦ рдХрд╛ рдкрд╣рд▓рд╛ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рджреЗрдЦреЗрдВ)ред
рдХрд╛рд╢, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рд╛рде, рд╕реНрдореГрддрд┐ рдореЗрдВ рдЗрддрдирд╛ рдмрдбрд╝рд╛ рд▓рд╛рдн рдЕрдиреНрдп рдУрд╡рд░рд╣реЗрдбреНрд╕ рдХреЗ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдЪрд▓реЛ рдмрд╕ рддрддреНрд╡реЛрдВ рдХреЛ рдЬреЛрдбрд╝рдХрд░ 100,000 рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рдгреА рдмрдирд╛рдПрдВ, рдФрд░ рдореЗрдореЛрд░реА рдЦрдкрдд рджреЗрдЦреЗрдВ:
data = [] for p in range(100000): data.append(DataItem("Alex", 42, "middle of nowhere")) snapshot = tracemalloc.take_snapshot() top_stats = snapshot.statistics('lineno') total = sum(stat.size for stat in top_stats) print("Total allocated size: %.1f MB" % (total / (1024*1024)))
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ __slots__ рдХреЗ рдмрд┐рдирд╛ 16.8 рдПрдордмреА рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде 6.9 рдПрдордмреА рд╣реИред рдмреЗрд╢рдХ 7 рдмрд╛рд░ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдХрд╛рдлреА рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдХреЛрдб рдкрд░рд┐рд╡рд░реНрддрди рдиреНрдпреВрдирддрдо рдерд╛ред
рдЕрдм рдХрдорд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред __Slots__ рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рдирд╛ __dict__ рд╕рд╣рд┐рдд рд╕рднреА рддрддреНрд╡реЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдкрд░ рдкреНрд░рддрд┐рдмрдВрдз рд▓рдЧрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдЬреЛрдВрд╕ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рдХреЛрдб рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛:
def toJSON(self): return json.dumps(self.__dict__)
рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдареАрдХ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдмрд╕ рдЕрдкрдирд╛ рддрд╛рдирд╛рд╢рд╛рд╣реА рдкреНрд░реЛрдЧреНрд░рд╛рдо рдмрдирд╛рдПрдВ, рд╕рднреА рддрддреНрд╡реЛрдВ рдХреЛ рд▓реВрдк рдореЗрдВ рдЫрд╛рдВрдЯ рдХрд░:
def toJSON(self): data = dict() for var in self.__slots__: data[var] = getattr(self, var) return json.dumps(data)
рдХрдХреНрд╖рд╛ рдореЗрдВ рдирдП рдЪрд░ рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдЬреЛрдбрд╝рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рдерд╛ред
рдФрд░ рдЖрдЬ рдХреЗ рд▓рд┐рдП рдЖрдЦрд┐рд░реА рдкрд░реАрдХреНрд╖рд╛ред рдпрд╣ рджреЗрдЦрдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ рдХрд┐ рдкреВрд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдХрд┐рддрдиреА рд╕реНрдореГрддрд┐ рд╣реИред рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рдЕрдВрдд рдореЗрдВ рдПрдХ рдЕрдВрддрд╣реАрди рд▓реВрдк рдЬреЛрдбрд╝реЗрдВ рддрд╛рдХрд┐ рдпрд╣ рдмрдВрдж рди рд╣реЛ, рдФрд░ рд╡рд┐рдВрдбреЛрдЬ рдЯрд╛рд╕реНрдХ рдореИрдиреЗрдЬрд░ рдореЗрдВ рдореЗрдореЛрд░реА рдЦрдкрдд рджреЗрдЦреЗрдВред
__Slots__ рдХреЗ рдмрд┐рдирд╛:

16.8MB рдХреБрдЫ рдЪрдорддреНрдХрд╛рд░ рд╕реЗ рдмрджрд▓ рдЧрдпрд╛ (рд╕рдВрдкрд╛рджрди - рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЪрдорддреНрдХрд╛рд░ рдХрд╛ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг) 70 рдПрдордмреА рдореЗрдВ (рд╕реА рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд╕реНрдХреНрд░реАрди рдкрд░ рдЕрднреА рддрдХ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдЖрдП рд╣реИрдВ?)ред
__Slots__ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд╕рд╛рде:

6.9MB 27MB рдореЗрдВ рдмрджрд▓ рдЧрдпрд╛ ... рдареАрдХ рд╣реИ, рдЖрдЦрд┐рд░рдХрд╛рд░, рд╣рдордиреЗ рдореЗрдореЛрд░реА рдХреЛ рдмрдЪрд╛рдпрд╛, 70 рдХреЗ рдмрдЬрд╛рдп 27MB рдХреЛрдб рдХреА рдПрдХ рдкрдВрдХреНрддрд┐ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд▓рд┐рдП рдЗрддрдирд╛ рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реИред
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ : рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ (рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП robert_ayrapetyan рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж), рдЙрдиреНрд╣реЛрдВрдиреЗ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдХрд┐ рдЯреНрд░реЗрд╕рдореЗрд▓реЙрдХ рдбрд┐рдмрдЧрд┐рдВрдЧ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдореЗрдореЛрд░реА рд╣реЛ рдЬрд╛рддреА рд╣реИред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдпрд╣
рдкреНрд░рддреНрдпреЗрдХ рдирд┐рд░реНрдорд┐рдд рд╡рд╕реНрддреБ рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рддрддреНрд╡ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдЕрдХреНрд╖рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреБрд▓ рдореЗрдореЛрд░реА рдЦрдкрдд рдмрд╣реБрдд рдХрдо рд╣реЛрдЧреА, рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ 2 рд╡рд┐рдХрд▓реНрдк рджрд┐рдЦрд╛рддрд╛ рд╣реИ:

рдЕрдЧрд░ рдЖрдкрдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдореЗрдореЛрд░реА рдмрдЪрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдХреНрдпрд╛ рдХрд░реЗрдВ? рдпрд╣
рдЦрд╕реНрддрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рд╕реА-рд╢реИрд▓реА рд╕рдВрд░рдЪрдирд╛рдПрдВ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЗрд╕реЗ рдХреЛрдб рдХреЗ рдЧрд╣рди рд╢реЛрдзрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдФрд░ рдкрд╣рд▓реА рд╡рд┐рдзрд┐ рдХрд╛рдлреА рдкрд░реНрдпрд╛рдкреНрдд рдирд┐рдХрд▓реАред
рдпрд╣ рдЕрдЬреАрдм рд╣реИ рдХрд┐ __slots__ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдХрднреА рднреА рд╣реИрдмрд░ рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдЬрд╛рдВрдЪ рдирд╣реАрдВ рдХреА рдЧрдИ рд╣реИ, рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рд▓реЗрдЦ рдЗрд╕ рдЕрдВрддрд░ рдХреЛ рдереЛрдбрд╝рд╛ рднрд░ рджреЗрдЧрд╛ред
рдПрдХ рдирд┐рд╖реНрдХрд░реНрд╖ рдХреЗ рдмрдЬрд╛рдпред
рдпрд╣ рд▓реЗрдЦ рдкрд╛рдпрдерди рдХреЗ рд╡рд┐рд░реЛрдзреА рд╡рд┐рдЬреНрдЮрд╛рдкрди рдХреА рддрд░рд╣ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдирд╣реАрдВ рд╣реИред рдкрд╛рдпрдерди рдмрд╣реБрдд рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╣реИ (рдЖрдкрдХреЛ рдкрд╛рдпрдерди рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП
рдмрд╣реБрдд рдХрдард┐рди рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛), рдПрдХ рднрд╛рд╖рд╛ рдЬреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдкрдврд╝рдиреЗ рдпреЛрдЧреНрдп рдФрд░ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рд╣реИред рдпреЗ рд▓рд╛рдн рдХрдИ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╡рд┐рдкрдХреНрд╖ рдХреЛ рдкрдЫрд╛рдбрд╝рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдкрдХреЛ рдЕрдзрд┐рдХрддрдо рдкреНрд░рджрд░реНрд╢рди рдФрд░ рджрдХреНрд╖рддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдк C ++ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рддреЗрдЬрд╝реА рд╕реЗ рдФрд░ рдХреБрд╢рд▓рддрд╛ рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред
рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рд╕рднреА рдХрд╛ рдзрдиреНрдпрд╡рд╛рдж, рдФрд░ рдЕрдЪреНрдЫрд╛ рдХреЛрдб :)