The Cost of Dynamism (was Re: Pyhon 2.x or 3.x, which is faster?)

BartC bc at freeuk.com
Sat Mar 12 10:12:32 EST 2016


On 12/03/2016 12:10, Chris Angelico wrote:
> On Sat, Mar 12, 2016 at 10:08 PM, BartC <bc at freeuk.com> wrote:

>> Writing: a=65 generates this byte-code for the right-hand-side:
>>
>>      LOAD_CONST      1 (65)       An integer
>>
>> But writing instead: a=ord('A') generates this:
>>
>>      LOAD_GLOBAL     0 (ord)
>>      LOAD_CONST      1 ('A')      A string
>>      CALL_FUNCTION   1
>
> I think the "non-issue" here is the difference between ASCII and
> Unicode. Either way, there's no way to say "the integer with the
> codepoint of this character" as a literal. But that's actually not
> even all that necessary, because subscripting a text string yields
> one-character strings - you almost never need the ordinals.

That explains why you rarely use integers, if you prefer to use strings 
even when there is a choice!

However, I was going to revise my benchmark to use strings instead of 
integers, to show how much slower they would be. But the program was 10% 
faster with strings!

I don't know what to make of that. Clearly comparing an integer with an 
integer is a very fast operation, or ought to be, while comparing 
strings is much less efficient at machine level.

So there's something funny going on. Either string operations are 
super-fast or integer operations are somehow crippled. Or maybe there so 
many other overheads, that the difference between strings and ints is lost.

That doesn't explain why ints are slower though (and this was the case 
even on Python 2 where the 'long' type is not involved).

-- 
Bartc



More information about the Python-list mailing list