Here is a simplified version of what I'm trying to do:
class a():
Requirement = 0
def func(self, oldlist, x):
newlist = [None]*3
newlist = oldlist
newlist[x] = b()
print "Class a"
g(newlist)
class b():
Requirement = 1
def g(list):
for i in range(3):
if list[i].Requirement==0:
list[i].func(list,i)
Initiallist=[None]*3
Initiallist[0]=a()
Initiallist[1]=b()
Initiallist[2]=a()
g(Initiallist)
Instead of trying to express what I expect in words, I made some diagrams that express what in my mind should happen:

Which would imply that the function inside class a should be called 4 times. However, it only gets called 2 times, so it seems that this is happening:

I don't understand why this is happening or how I should fix it.