[Patches] [ python-Patches-1629718 ] fast tuple[index] by inlining on BINARY_SUBSCR

SourceForge.net noreply at sourceforge.net
Mon Jan 8 08:19:33 CET 2007


Patches item #1629718, was opened at 2007-01-07 06:51
Message generated for change (Settings changed) made by loewis
You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=305470&aid=1629718&group_id=5470

Please note that this message will contain a full copy of the comment thread,
including the initial issue submission, for this request,
not just the latest update.
Category: Core (C code)
Group: Python 2.5
>Status: Closed
>Resolution: Rejected
Priority: 5
Private: No
Submitted By: Hirokazu Yamamoto (ocean-city)
Assigned to: Nobody/Anonymous (nobody)
Summary: fast tuple[index] by inlining on BINARY_SUBSCR

Initial Comment:
Hello.

I noticed there is speed difference between

  a = [0,] # list
  a[0] # fast

and

  a = (0,) # tuple
  a[0] # slow

while solving ICPC puzzle with Python.

I thought this is wierd because, indeed tuple is readonly, there is no conceptual difference between list and tuple when 'extract' item from them.

After investigation, I found this difference comes from the shortcut for list on ceval.c (BINARY_SUBSCR).

Is it valuable to put shortcut for tuple too? I'll attach the patch for release-maint25 branch. Thank you.


----------------------------------------------------------------------

Comment By: Hirokazu Yamamoto (ocean-city)
Date: 2007-01-08 07:58

Message:
Logged In: YES 
user_id=1200846
Originator: YES

>see the endless discussions on python-dev...

Thank you, rhettinger. I'm interested in it. I'll see them.

----------------------------------------------------------------------

Comment By: Hirokazu Yamamoto (ocean-city)
Date: 2007-01-08 06:49

Message:
Logged In: YES 
user_id=1200846
Originator: YES

Sorry, I want to withdraw this.

Python/lib/test/testall.py
===> list: 2541719, tuple: 620815, other: 6174214

The ratio of tuple seems relatively low.
File Added: statistics.patch

----------------------------------------------------------------------

Comment By: Raymond Hettinger (rhettinger)
Date: 2007-01-08 04:56

Message:
Logged In: YES 
user_id=80475
Originator: NO

I recommend against this.

Any additional specialization code will necessarily slow down other cases
handled by PyObject_GetItem.  So, the merits of speeding-up tuple indexing
need to be weighed against the costs (slowing down other code and the
excess loading of ceval.c with specialization code).

Also, I reject the premise that there is no conceptual difference between
list and tuple indexing.  The former is a primary use case for lists and
the latter is only incidental to tuple use cases (see the endless
discussions on python-dev and comp.lang.python about why tuples are not to
be regarded as immutable lists and in fact have a different intended set of
uses).

----------------------------------------------------------------------

Comment By: Martin v. Löwis (loewis)
Date: 2007-01-07 22:34

Message:
Logged In: YES 
user_id=21627
Originator: NO

It would be helpful to get some statistics on how often this occurs: of
all case of BINARY_SUBSCR, how man refer to tuples, how many to lists, and
how many to other objects?

To get some data, you can measure a run of a test suite, or a run of IDLE,
or of compileall.


----------------------------------------------------------------------

You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=305470&aid=1629718&group_id=5470


More information about the Patches mailing list