为什么python列表不通过引用传递

时间:2016-03-17 10:29:19

标签: python

我做了一个家庭作业,我的任务是制作一个删除最高价和最低价的脚本,并在这里打印中间价格是我的代码:

def removeall(list,value):
    mylist = [n for n in list if n != value]  
    return mylist

prices = removeall(prices,highest)

我知道我可以让它像以下一样工作:

{{1}}

但我的问题是为什么removeall()不会改变价格?它不是通过引用传递的吗?

2 个答案:

答案 0 :(得分:2)

Python参数与其他语言中的引用并不完全相同。它更像是一个通过值传递的指针。如果您将指针修改为指向其他内容,则调用代码不会看到更改。

要进行在函数外部可以看到的更改,您需要在适当的位置修改列表。一种简单的方法是使用切片赋值:

list[:] = [n for n in list if n != value]

这会更改现有列表,而不仅仅是重新绑定list变量。 (注意,这是一个非常糟糕的变量名称,因为它会影响内置list类型。我强烈建议将其作为局部变量名称避免使用!)

答案 1 :(得分:0)

您的removeall功能并未改变传入的列表,它正在创建一个新列表,将其打印出来然后扔掉。