On May 14, 8:24 pm, vava...@cpu111.math.uwaterloo.ca (Stephen Vavasis) wrote: > In my previous posting, I inquired how to change a python numeric object > in place. Several people responded that this is not possible. Perhaps I > should explain the larger problem that I am trying to solve, and then the > solution will become apparent. I have a C routine R that invokes a Python > routine S repeatedly. This Python routine S takes three arguments, two > floats and an integer. I have read the documentation explaining how R can > use the C API to construct an argument list for invoking S. The issue > that baffles me is that, as far as I can tell, each time R invokes S > again, it needs to deallocate and reallocate the three arguments.
That's correct. (Well, not exactly: sometimes PyInt_New can use a pre-existing object rather than to allocate a new one. Also ints and floats I think both use arena allocation, meaning that Python gets big chunks and creates objects out of that. It's not like malloc gets called for every PyInt_New invokation. But those are implementation details. Just trust that Python's been pretty well optimized by now to create new int and float objects.) > It > would seem be much more efficient if R could create the argument list once > and then modify the values inside of it for each subsequent invocation of > S. It really won't make that much of a difference. Python is creating and destroying objects all the time. If you were to execute a line like this in Python: a = b + 2.0 / (0.5 * m * v * v) It'd probably create and delete 5 intermediate number objects. Whatever small gains you could make by eliminating a few object allocations in your calling code would hardly be noticeable. Carl Banks -- http://mail.python.org/mailman/listinfo/python-list