list函数是否可以扩展用于函数? (Python 3)

时间:2017-11-12 07:27:51

标签: python list

我的问题是函数是否可以使用list方法扩展?我正在尝试理解的函数示例:

def g(p):
    w = p.pop(1)
    p.extend(w)
    return p
y = ['k', 'l', 'm']
g(y[:]).extend(g(y))

返回y的以下值:

['k', 'm', 'l']

但是我期待y的以下值:

['k', 'm', 'l', 'k', 'm', 'l']

有人能够向我解释这里发生了什么吗?是不允许将函数用作参数,还是不允许它们使用list方法扩展?

1 个答案:

答案 0 :(得分:1)

按预期工作:

发生了什么,是:

1-首先,y未发生变异,因为您将其深层副本传递给g。 直接传递给g的第二次调用时,2- g会发生变异 3-您没有从g(y)中分配返回的结果 4- extend返回无

def g(p):
    w = p.pop(1)
    p.extend(w)
    return p
y = ['k', 'l', 'm']

res = g(y[:])      # <- this does not mutate y
res.extend(g(y))   # <- this does mutate y
y, res

输出:

                   result from the first call to g
                   |------------|
(['k', 'm', 'l'], ['k', 'm', 'l', 'k', 'm', 'l'])
  |------------|                  |------------|
 y mutated at 2nd call             extended with mutated y from 2nd call