在Python中传递指向列表的指针

4 投票
5 回答
10928 浏览
提问于 2025-04-17 08:56

有没有办法把一个列表的指针传递过去,这样我就可以直接用 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内置的,所以用它作为变量名并不好。

撰写回答