在Python中传递指向列表的指针
有没有办法把一个列表的指针传递过去,这样我就可以直接用 update_list(list, data)
来更新列表?
而不是像现在这样必须写 list = update_list(list, data)
。
不管这是否可行,在这种情况下,什么做法是比较好的,符合Python风格的呢?
5 个回答
1
当然,记得用合适的变量名称(list
是一种类型):
>>> def update_list(lst):
... lst.append('hello')
...
>>> a = []
>>> update_list(a)
>>> a
['hello']
>>>
我个人不太喜欢直接修改原来的东西,其实我更喜欢第二种方法,而不是第一种。
4
在Python中,你不需要传递指针。只需要把整个列表的切片赋值就可以了。
def update_list(list, data):
list[:] = newlist
10
我建议你看看这篇文章:从C++的角度看Python变量名的语义。
所有变量都是引用
这句话虽然简单,但它概括了整篇文章的核心意思。同时,理解一个list
是可变类型的概念,也能帮助你理解下面的例子是怎么回事。
In [5]: def update_list(lst, data):
...: for datum in data:
...: lst.append(datum)
...:
In [6]: l = [1, 2, 3]
In [7]: update_list(l, [4, 5, 6])
In [8]: l
Out[8]: [1, 2, 3, 4, 5, 6]
你甚至可以通过使用extend()方法来简化这个过程:
In [9]: def update_list(lst, data):
...: lst.extend(data)
...:
这样做可能就不需要你自己写的函数了。
注意: list
是Python内置的,所以用它作为变量名并不好。