Message253074
Default __sizeof__() implementation uses tp_basicsize. This makes it to work correctly with most builtin types and types with __slots__ (using __slots__ increases tp_basicsize). But special implementations of __sizeof__() use static object size ('sizeof(XXXObject)'), and return incorrect result for subclasses that increase tp_basicsize. Proposed patch makes __sizeof__() for all subclassable builtin type that support changing object size (i.e. tp_itemsize == 0) to use dynamic size _PyObject_SIZE(Py_TYPE(self)).
Example (with patched code):
>>> class D(dict):
... __slots__ = 'a', 'b', 'c'
...
>>> sys.getsizeof({})
144
>>> sys.getsizeof(D())
156
In unpatched Python sys.getsizeof(D()) returns 144. |
|
Date |
User |
Action |
Args |
2015-10-16 16:42:01 | serhiy.storchaka | set | recipients:
+ serhiy.storchaka |
2015-10-16 16:42:00 | serhiy.storchaka | set | messageid: <1445013720.79.0.218203938843.issue25421@psf.upfronthosting.co.za> |
2015-10-16 16:42:00 | serhiy.storchaka | link | issue25421 messages |
2015-10-16 16:42:00 | serhiy.storchaka | create | |
|