Memory allocation in for loops

invitro81 invitro81 at gmx.net
Sun Feb 26 17:01:26 EST 2006


Which one is better w.r.t. memory allocation but also w.r.t. speed:

## 1.1 ##

def forloop(a,b):

	for idx in range(a,b):
		## ..
		## do something
		## ..

## 1.2 ##

def whileloop(a,b):

	idx = a
	while idx < b:
		## ..
		## do something
		## ..
		idx += 1

#########

I mean what I really would like is to have something C++ - like "for 
(int idx = a; idx < b; i++) { .. }" where no internal vector or 
something like that is allocated but only a few op's on registers are 
performed; in the whileloop in python the picture is roughly the same 
behind the scenes I guess.. but what about in the forloop? Is python 
smart enough not to generate an internal vector as it does usually for 
lists or do I have to apply some modifications (xrange..)? What happens 
further if I do the following:

## 2.1 ##

def forloop(a,b,lst):

	for idx in lst.sort():
		## ..
		## do something
		## ..

#######

Is the sorting function called in every iteration just to detect that 
(after the first sorting) it is useless comming back to the loop or does 
this happen:

## 2.2 ##

def forloop(a,b,lst):

	lst.sort()
	for idx in lst:
		## ..
		## do something
		## ..

#######



More information about the Python-list mailing list