任何人都可以向我解释为什么 a
和 b
下的两个函数表现不同。函数 a
在本地更改 names
,b
更改实际对象。
我在哪里可以找到此行为的正确文档?
def a(names):
names = ['Fred', 'George', 'Bill']
def b(names):
names.append('Bill')
first_names = ['Fred', 'George']
print "before calling any function",first_names
a(first_names)
print "after calling a",first_names
b(first_names)
print "after calling b",first_names
输出:
before calling any function ['Fred', 'George']
after calling a ['Fred', 'George']
after calling b ['Fred', 'George', 'Bill']
最佳答案
在函数内部给参数赋值不影响传递的参数。它只是使局部变量引用新对象。
同时,list.append
就地修改列表。
如果你想改变函数内部的列表,你可以使用切片赋值:
def a(names):
names[:] = ['Fred', 'George', 'Bill']
关于Python 混淆函数引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25226421/