即使在python中提交交换函数之后,列表仍然保持不变

时间:2014-02-22 11:51:31

标签: python function

我是python的新手,所以只是一个关于python函数如何工作的简单问题,因为我已经习惯了C / C ++所以这是我的问题,我有一个列表:

a = ['0','1','2','3','4','5','6','7','8','9']

我有一个函数,它接受list的两个元素并交换它们:

def swap(d,e):
    temp = e
    e = d
    d = temp

现在当我传递像假设

这样的论点时
swap(a[0],a[5])

它没有做任何事情,我的意思是列表保持不变。我也在py文件的最开始定义了我的函数,所以当我插入打印临时像

def swap(d,e):
    temp = e
    print temp
    e = d
    d = temp

它给了我正确的价值说出[5]是什么 我的意思是如果我在C

中做了这样的事情

2 个答案:

答案 0 :(得分:3)

当您将temp分配给e时,您只是创建了对象e的新引用,但您所做的与列表无关

def swap(l, o, n): #pass the list, old position, new position
    l[n], l[o] = l[o], l[n]

这样,您确实可以更改列表。

答案 1 :(得分:1)

当您将列表中的对象传递给swap时,它们会在本地绑定到参数名称de。然后,您将de交换,但这不会更改列表。您可以return值:

def swap(d, e):
    return e, d

然后称之为:

a[0], a[5] = swap(a[0], a[5])

但显然你可以这样做:

a[0], a[5] = a[5], a[0]

或者,根据alKid的回答传递列表和索引。