Python中的函数和Mutable列表

时间:2015-11-11 05:07:43

标签: python python-3.x

抱歉,我是python的新手,仍然试图围绕一些基础知识。我知道列表是python中的可变对象,但无法理解下面的两个函数如何处理列表,以及为什么一个更改列表本身而另一个不更改

def f(x, y):
    x.append(x.pop(0))
    x.append(y[0])
    return x

>>> a=[1,2,3]
>>> b=[1,2]
>>> f(a,b)
>>> [2, 3, 1, 1]
>>> a
>>> [2, 3, 1, 1]

def f(x, y):
    y = y + [x]
    return y

>>> a=[1,2,3]
>>> f(4,a)
>>> [1, 2, 3, 4]
>>> a
>>> [1, 2, 3]

谢谢

2 个答案:

答案 0 :(得分:2)

+操作将结果存储在新列表中,而append操作将新值附加到现有列表中

例如,

def f(x, y):
    y = y + [x]
    print(y)
    y.append(x)
    print(y)

a=[1,2,3]
f(4,a)
print(a)

给出

[1, 2, 3, 4]
[1, 2, 3, 4, 4]
[1, 2, 3]

y = y + [x]创建了一个新列表y&因此,更改未反映到原始列表a&后面的append也会更改新列表y

def f(x, y):
    y.append(x)
    print(y)
    y = y + [x]
    print(y)

a=[1,2,3]
f(4,a)
print(a)

输出

[1, 2, 3, 4]
[1, 2, 3, 4, 4]
[1, 2, 3, 4]

此处append操作会在创建新列表a后更改原始列表y

答案 1 :(得分:0)

简单地说,区别在于append+的功能。 append在列表中添加新项目而不创建新列表。 +将两个列表合并在一起并创建一个新列表。

有关详细信息,请参阅DNS's answer here