30-传递引用
4.7.2 传递引用
要理解参数如何传递给函数,引用就特别重要。当函数被调用时,参数的值被复制给变元。对于列表(以及字典,我将在下一章中讨论),这意味着变元得到的是引用的复制。要了解这导致的后果,请打开一个新的文件编辑器窗口,输入以下代码,并保存为passingReference.py:
def eggs(someParameter):
someParameter.append('Hello')
spam = [1, 2, 3]
eggs(spam)
print(spam)
请注意,当 eggs()
函数被调用时,没有使用返回值来为 spam
变量赋新值。相反,它直接就地修改了该列表。在运行时,该程序产生的输出结果如下:
[1, 2, 3, 'Hello']
尽管 spam
和 someParameter
变量包含了不同的引用,但它们都指向相同的列表。这就是为什么函数内的 append('Hello')
方法调用在函数调用返回后,仍然会对该列表产生影响。
请记住这种行为:如果在Python处理列表和字典变量时采用这种方式,可能会导致令人困惑的bug。