为什么这个.pop(0)像这样工作

Gho*_*ozt 3 python python-2.7

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

a = [4,5]
b = [1,2,3]
w = f(a,b) + f(a,b)
Run Code Online (Sandbox Code Playgroud)

w原来是[4,1,5,1,4,1,5,1]然而如果我手动完成代码(在我脑海中),我得到[5,4,1,4,1,5] ,1]

为什么是这样?

f(a,b)= [5,4,1]对吗?那么a将是= [5,4,1]和b = [1,2,3].

那么f(a,b)= [4,1,5,1]就是:[5,4,1] + [4,1,5,1] = [5,4,1,4,1 ,5,1]不[4,1,5,1,4,1,5,1]

为什么代码会改变这个?在尝试自己运行代码时,我做错了什么?

Ign*_*ams 6

两个调用都返回相同的列表,即绑定的对象a,从而导致第二个返回值(仍然是绑定的对象a)被添加到自身.该函数只会改变列表,永远不会替换它.

  • @aIKid:同样,无论什么*当你返回列表时,它仍然是同一个列表.进一步的突变进一步突变它. (3认同)
  • @ IgnacioVazquez-Abrams也许您应该在答案中添加更多细节.在我阅读整个评论列表之前,我没有得到它. (2认同)