[英]Recursion and lists in Python
這是我要做的事情的簡化版本:
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)
我沒有嘗試用語言表達我的期望,而是制作了一些圖表來表達我的想法:
這意味着應該將類a中的函數調用4次。 但是,它僅被調用兩次,因此似乎正在發生這種情況:
我不明白為什么會這樣或我應該如何解決。
不確定,但是我認為您的問題是此行:
newlist = oldlist
我猜您想復制列表(而不是更改oldlist
),因此您應該簡單地使用:
newlist = oldlist[:]
因此將func
更改為
def func(self, oldlist, x):
newlist = oldlist[:]
newlist[x] = b()
print "".join(x.__class__.__name__ for x in newlist)
g(newlist)
版畫
BBA
BBB
ABB
BBB
在func
您需要創建一個oldlist
副本,否則它將修改相同的列表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.