为什么即使在函数中修改了列表的值后,列表的值也没有改变?

时间:2019-03-29 19:01:49

标签: python string list mutable

我们知道Python中的列表是可变对象。但是,以下代码不会更改在函数内部修改其值的列表的值。

def change(l):
    l=l[2:5]
    return()
l=[1,3,4,5,2,10]
change(l)
print (l)

我期望输出[4,5,2],但它显示的是结果[1,3,4,5,2,10]。

4 个答案:

答案 0 :(得分:1)

与UnhloySheep和Mark Meyer所说的完全一样,将代码从更改为

l = l[2:5]

l[:] = l[2:5]

应该解决您的问题。 您完整的代码应为:

def change(l):
   l[:]=l[2:5]
return()

l=[1,3,4,5,2,10]
change(l)
print (l)

此印刷品作为您的答案。

  

[4、5、2]

答案 1 :(得分:0)

在函数中对列表进行变异时,您将需要返回更新的列表,如:

def change(l):
    l=l[2:5]
    return l

答案 2 :(得分:0)

您不是要更改列表;您只是在更改局部变量l的值。而是修改该变量引用的 object

def change(lst):
    del lst[5:]  # or lst[5:] = []
    del lst[:2]  # or lst[:2] = []
    # or just l[:] = l[2:5], which I forgot about until reading César Correa's answer


some_list = [1,3,4,5,2,10]
change(some_list)
print (some_list)

答案 3 :(得分:0)

def change(l):
   l[:] = l[2:5]

上面的代码将起作用。

普通切片会在切片后更改列表的引用。您可以使用 id()在切片前后