当你传递一个列表给一个函数的时候,函数得到的是对该列表的一个引用。如果函数修改了列表,调用者会看到变化的。比如下面这个 delete_head 函数就从列表中删除第一个元素:
$ cat c.py
#!/bin/python
def delete_head(t):
del t[0]
return t
letters = [10, 20, 30]
print(delete_head(letters))
$ python3 c.py
[20, 30]
形式参数 t 和变量 letters 都是同一对象的别名。
因为这个列表被两个框架所公用,所以把它画在了它们之间。
一定要区分修改列表的运算和产生新列表的运算,这特别重要。
比如 append 方法是修改一个列表,
>>> t1 = [1, 2]
>>> t2 = t1.append(3)
>>> t1
[1, 2, 3]
但加号+运算符是产生一个新的列表:
>>> t3 = t1 + [4]
>>> t1
[1, 2, 3]
>>> t3
[1, 2, 3, 4]
加号+运算符创建了新的列表t3,但并不修改源列表t1。
结束。