Serhiy Storchaka added the comment:

It can't work well if we count internal Python objects that can be shared. This 
is because the "work well" concept is not well defined. And because the 
implementation of a certain defined calculation algorithm can be completely 
unmaintainable, that is not well.

If we wrote in the StringIO the same 1 MB string twice, should the __sizeof__() 
return about 1) 2 MB, 2) 1 MB or 3) size of empty stream if there are external 
links to this shared string? Patch implements the second strategy, it can be 
simplified to the first one or complicated even more to a third one. Even more 
complication will need to take into account the sharing of eol string ('\r' and 
'\n' always shared, '\r\n' may be).

> I would personally prefer if the computations where done in Py_ssize_t, not 
> PyObject*

I too. But on platforms with 64-bit pointers and 32-bit sizes we can allocate 
total more than PY_SIZE_MAX bytes (hey, I remember the DOS memory models with 
16-bit size_t and 32-bit pointers). Even faster we get an overflow if allow the 
repeated counting of shared objects. What to do with overflow? Return 
PY_SIZE_MAX or ignore the possibility of errors?

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue15490>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to