为什么python不支持将mylist重新定义为[7,7,7,7]并将其传播回main((。但是如果我将每个索引更改为 7,例如 mylist[0] = 7 会使第二个打印语句 [7,2,3,4]
def changes(mylist):
mylist = [7,7,7,7]
def main():
mylist = [1,2,3,4]
print (mylist)
changes(mylist)
print (mylist)
main()
如果我使用它会起作用
def changes(mylist):
for x in range(len(mylist)):
mylist[x] = 7
def main():
mylist = [1,2,3,4]
print (mylist)
changes(mylist)
print (mylist)
main()
这是因为函数中的赋值changes
创建一个新列表,其范围仅限于此函数。
您可以打印每个对象的id
以便轻松查看:
def changes(mylist):
print('argument mylist id: {}'.format(id(mylist)))
mylist = [7,7,7,7]
print('7, 7, 7, 7 list id: {}'.format(id(mylist)))
def main():
mylist = [1,2,3,4]
print (mylist)
print('my list in main id: {}'.format(id(mylist)))
changes(mylist)
print (mylist)
main()
def changes(mylist):
mylist = [7,7,7,7]
在此代码中,mylist
是一个局部变量。它在函数外部不可见。在函数的主体中,您分配了一个列表,但在外部,此列表不可见。
如果要保留更改,则应返回新列表。请参阅此代码:
def changes(mylist):
mylist = [7,7,7,7]
return mylist # to persist the changes
因此,其余代码将是:
def main():
mylist = [1,2,3,4]
print (mylist)
mylist = changes(mylist)
print (mylist)
main()