On 12/23/14 8:28 PM, Dave Tian wrote:
Hi,
There are 2 statements:
A: a = ‘h’
B: b = ‘hh’
According to me understanding, A should be faster as characters would shortcut
this 1-byte string ‘h’ without malloc; B should be slower than A as characters
does not work for 2-byte string ‘hh’, which triggers the malloc.
I'm not sure why you thought a two-character string would require an
extra malloc? In Python 2.7, strings have a fixed-size head portion,
then variable-length character storage. These two parts are contiguous
in one chunk of memory, for any length string. Making a string requires
one malloc, regardless of the size of the string.
What reference were you reading that implied otherwise?
However, when I put A/B into a big loop and try to measure the performance
using cProfile, B seems always faster than A.
Testing code:
for i in range(0, 100000000):
a = ‘h’ #or b = ‘hh’
Testing cmd: python -m cProfile test.py
So what is wrong here? B has one more malloc than A but is faster than B?
Thanks,
Dave
--
Ned Batchelder, http://nedbatchelder.com
--
https://mail.python.org/mailman/listinfo/python-list