def makelist():
list = []
initial = [0, 100]
a = 1
while a <= 10:
new_num = (initial[0] + initial[1])//2
if new_num%2 == 0:
initial[1] = new_num
else:
initial[0] = new_num
list.append(initial)
a += 1
return list
为什么以上代码会返回:
[[43, 44], [43, 44], [43, 44], [43, 44], [43, 44], [43, 44], [43, 44], [43, 44], [43, 44], [43, 44]]
而不是:
[[0, 50], [25, 50], [37, 50], [43, 50], [43, 46], [43,44], [43, 44], [43, 44], [43, 44], [43, 44]]
即。连续的分裂而不是最后的分裂10次。
由于
答案 0 :(得分:4)
首先,永远使用内置类型名称命名变量。在您的情况下list
。而且你的程序没有按预期工作,因为
list.append(initial)
您一次又一次地将该引用附加到同一列表中。最后,列表中的所有元素都指向同一个列表initial
。要解决此问题,您可以像这样创建initial
的副本并附加
list.append(initial[:])
查看此图表https://www.lucidchart.com/documents/edit/43c8-0c30-5288c928-a4fe-105f0a00c875。这可能有助于您更好地理解。