[issue2417] Integer floor division (//): small int check omitted

Terry J. Reedy report at bugs.python.org
Wed Mar 19 05:45:57 CET 2008


New submission from Terry J. Reedy <tjreedy at udel.edu>:

Python 3.0a3 (r30a3:61161, Mar  1 2008, 22:51:17) [MSC v.1500 32 bit
(Intel)] on win32

>>> a,b=1,1//1
>>> a is b
False

IDLE 3.0a3 
>>> a,b=1,1//1
>>> a is b
True

ditto for 2.5.2 interpreter   

On c.l.p, Duncan Booth wrote
I've had a look to see why this happens: long division (and in Python 3
all integers are longs) allocates a new long to hold the result of the
division so it will never use one of the preallocated 'small int' values.

That maybe explains the change from 2.5 but not the difference from
IDLE.  More important, the small int checks are present with the other
operations:
>>> 1*1 is 1
True
>>> 1+1 is 2
True
>>> 1-1 is 0
True
>>> 1**1 is 1
True

so the omission with // is plausibly a bug.

----------
components: Interpreter Core
messages: 64037
nosy: tjreedy
severity: normal
status: open
title: Integer floor division (//): small int check omitted
type: behavior
versions: Python 3.0

__________________________________
Tracker <report at bugs.python.org>
<http://bugs.python.org/issue2417>
__________________________________


More information about the Python-bugs-list mailing list