[英]How does editing lists in function work
我无法理解列表:
mList = []
def func1(mList):
mList.append("1")
return
func1()
print mList
据我所知,因为列表是可变的,如果我在函数中编辑它,主列表也将被编辑。 在我正在处理的程序中,正在使用一个列表,我将其用作“保存文件”,但是,我正在使用的第二个列表作为“value_blacklist”在编辑/添加后未保存。
我把问题的一部分包含在我遇到问题的实际代码中,如果有任何帮助的话。
def func04(feedback, test_list, value_blacklist, upper_limit=6):
if value_blacklist == []:
value_blacklist = blacklist_gen(length)
import random
new_list = []
for index in list(range(0, len(feedback))):
if feedback[index] == 0: #This value is correct, leave it
new_list.append(test_list[index])
elif feedback[index] == 2:
value_blacklist = full_blacklist(test_list[index], value_blacklist)
new_list.append(0)
elif feedback[index] == 1:
value_blacklist[index].append(test_list[index])
new_list.append(0)
for index in list(range(0, len(feedback))):
if new_list[index] == 0:
new_list[index] = pick_new(index, value_blacklist, upper_limit)
return new_list
next_guess = lambda: func04(feedback(), save_game[-1], value_blacklist, save_game[0])
谢谢你的帮助,我真的很困惑。
无论你说什么
value_blacklist = ...
您正在将value_blacklist
重新绑定到新的(列表)对象。 如果你反而说
value_blacklist[:] = ...
您将替换列表的内容而不重新绑定它。
问你很多问题,直到你真正理解这一点。 “得到”它非常重要。
在函数中使用=
运算符时,不会修改现有对象。 表达式的右侧创建一个新列表并返回对它的引用,并将该引用赋给value_blacklist
。
value_blacklist = blacklist_gen(length)
...
value_blacklist = full_blacklist(test_list[index], value_blacklist)
这些是您创建新本地列表并使用value_blacklist
引用它们的value_blacklist
。 这就是value_blacklist
没有反映变化的原因。 您可以通过在赋值语句之后和函数开头打印value_blacklist
的id
来确认这一点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.