Intrigued by this question about infinite loops in perl: while (1) Vs. for (;;) Is there a speed difference?, I decided to run a similar comparison in python. I expected that the compiler would generate the same byte code for while(True): pass and while(1): pass, but this is actually not the case in python2.7.
The following script:
import dis
def while_one():
    while 1:
        pass
def while_true():
    while True:
        pass
print("while 1")
print("----------------------------")
dis.dis(while_one)
print("while True")
print("----------------------------")
dis.dis(while_true)
produces the following results:
while 1
----------------------------
  4           0 SETUP_LOOP               3 (to 6)
  5     >>    3 JUMP_ABSOLUTE            3
        >>    6 LOAD_CONST               0 (None)
              9 RETURN_VALUE        
while True
----------------------------
  8           0 SETUP_LOOP              12 (to 15)
        >>    3 LOAD_GLOBAL              0 (True)
              6 JUMP_IF_FALSE            4 (to 13)
              9 POP_TOP             
  9          10 JUMP_ABSOLUTE            3
        >>   13 POP_TOP             
             14 POP_BLOCK           
        >>   15 LOAD_CONST               0 (None)
             18 RETURN_VALUE        
Using while True is noticeably more complicated. Why is this?
In other contexts, python acts as though True equals 1:
>>> True == 1
True
>>> True + True
2
Why does while distinguish the two?
I noticed that python3 does evaluate the statements using identical operations:
while 1
----------------------------
  4           0 SETUP_LOOP               3 (to 6) 
  5     >>    3 JUMP_ABSOLUTE            3 
        >>    6 LOAD_CONST               0 (None) 
              9 RETURN_VALUE         
while True
----------------------------
  8           0 SETUP_LOOP               3 (to 6) 
  9     >>    3 JUMP_ABSOLUTE            3 
        >>    6 LOAD_CONST               0 (None) 
              9 RETURN_VALUE         
Is there a change in python3 to the way booleans are evaluated?
 
     
     
     
    